除了sample.com/index.html和sample.com/?i=1之外,如何将所有请求重定向到check.php

时间:2016-08-23 13:09:33

标签: .htaccess redirect mod-rewrite

我正在尝试将example.com/123example.com/any-url等所有请求重定向到check.php。但我不需要重定向这两个请求:example.com/example.com/?i=1

这是我的.htaccess:

RewriteEngine on 
RewriteRule ^(|?i=1)($|/) - [L]
RewriteRule .* check.php

但是这个仍然会将所有内容重定向到check.php我做错了什么?

1 个答案:

答案 0 :(得分:0)

RewriteRule ^(|?i=1)($|/) - [L]

您无法将查询字符串与RewriteRule 模式匹配。此处只能匹配URL路径(特别是排除查询字符串),您需要使用RewriteCond指令来匹配查询字符串。 (但是,正则表达式看起来无效,我原以为它会产生500错误?也就是说,如果它正在被执行?)

请尝试以下方法:

RewriteEngine On
RewriteCond %{QUERY_STRING} !^i=1$
RewriteRule !^(index\.html)?$ check.php [L]

对于除文档根目录(和/index.html)以外的所有不包含查询字符串i=1的请求,请重写为check.php

请注意,这是内部重写,而不是外部重定向。