试图在.htaccess中为RewriteRule添加一个例外

时间:2010-02-09 02:30:40

标签: apache .htaccess mod-rewrite

我正在重定向所有请求:

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 =”

我做错了什么?感谢

1 个答案:

答案 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