在apache重定向中限制一些url模式

时间:2014-01-17 10:30:32

标签: apache .htaccess mod-rewrite redirect url-rewriting

我正在写一个重定向来匹配这个模式/消息/ *的任何网址。

RewriteRule ^/message/(.+)$ http://abet.in/message/$1 [NC,R=301,L]

现在我想通过不在网址中允许一些字符串模式来修改它。

RewriteCond to check /message/index.html in the url. 

1. Check if the request url contains /message/index.html.
2. If the condition is not met then do a redirect.

我尝试了以下方法。但我不确定它们是否正确。

RewriteCond %{THE_REQUEST} !^/message/index

RewriteCond %{REQUEST_URI} !^/message/index [NC]

有人可以告诉你如何做到这一点。

1 个答案:

答案 0 :(得分:2)

%{THE_REQUEST}包含一个类似于常规页面请求的字符串:

GET /message/index.html HTTP/1.1

%{REQUEST_URI}看起来像这样:

/message/index.html

所以你的第二个选择几乎是正确的。 RewriteRules的 Pattern 开头不需要/

此外,这两条规则将阻止所有启动/message/index的请求被重定向:

RewriteCond %{REQUEST_URI} !^/message/index [NC]
RewriteRule ^message/(.+)$ http://abet.in/message/$1 [NC,R=301,L]

如果您只想阻止/message/index.html而不是/message/index.php/message/index-of-something-else,请执行以下操作:

RewriteCond %{REQUEST_URI} !^/message/index\.html [NC]
RewriteRule ^message/(.+)$ http://abet.in/message/$1 [NC,R=301,L]