我正在尝试将example.com/123
或example.com/any-url
等所有请求重定向到check.php
。但我不需要重定向这两个请求:example.com/
和example.com/?i=1
。
这是我的.htaccess:
RewriteEngine on
RewriteRule ^(|?i=1)($|/) - [L]
RewriteRule .* check.php
但是这个仍然会将所有内容重定向到check.php我做错了什么?
答案 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
。
请注意,这是内部重写,而不是外部重定向。