我正在重定向所有请求:
RewriteRule ^sitemap.xml$ sitemap.php?/ [QSA,L]
# the line below is the one I'm having trouble with
RewriteCond %{REQUEST_URI} !^market-reports$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) /index.php?section=$1 [QSA,L]
正如您所看到的,我所有的传入链接都指向index.php。但现在我想阻止一个人去那里。我之前从未写过自己的RewriteCond
,所以我有点不确定我所做的事情是否正确。
基本上我想说的是:“如果传入的URL是文件,目录或/ market-reports /什么都不做。否则将URL发送到index.php?section =”
我做错了什么?感谢
答案 0 :(得分:19)
所以你只需要忽略http://yourdomain.com/market-reports(除了文件/目录?)。你应该没问题:
RewriteCond %{REQUEST_URI} !^/market-reports/?$
这将(不)匹配“http://yourdomain.com/market-reports”以及“http://yourdomain.com/market-reports/”作为问号“?”,在mod_rewrite使用的Perl兼容正则表达式词汇表中,使匹配可选(一个通配符)在字符串锚点结束之前,用文字美元符号“$”表示。
“^”符号用作匹配字符串开头和“!”的锚点。否定匹配,以便任何与表达式其余部分不匹配的字符串URL将被重写为其他指定的规则。 见mod_rewrite regex vocabulary