.htaccess 如何将所有请求重定向到check.php,sample.com/index.html和sample.com/?i=1除外
我正在尝试将所有请求(如.htaccess 如何将所有请求重定向到check.php,sample.com/index.html和sample.com/?i=1除外,.htaccess,redirect,mod-rewrite,.htaccess,Redirect,Mod Rewrite,我正在尝试将所有请求(如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我做错了什么 您无法将查询字符串与重写规则模式匹配。此处
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我做错了什么
您无法将查询字符串与重写规则
模式匹配。此处只能匹配URL路径(尤其不包括查询字符串),您需要使用RewriteCond
指令来匹配查询字符串。(然而,这个正则表达式看起来是无效的,我本以为它会生成一个500错误?也就是说,如果它被执行的话??)
请尝试以下操作:
RewriteEngine On
RewriteCond %{QUERY_STRING} !^i=1$
RewriteRule !^(index\.html)?$ check.php [L]
对于除文档根目录(和/index.html
)之外的所有不包含查询字符串i=1
的请求,请重写为check.php
请注意,这是一个内部重写,而不是外部重定向
您无法将查询字符串与重写规则
模式匹配。此处只能匹配URL路径(尤其不包括查询字符串),您需要使用RewriteCond
指令来匹配查询字符串。(然而,这个正则表达式看起来是无效的,我本以为它会生成一个500错误?也就是说,如果它被执行的话??)
请尝试以下操作:
RewriteEngine On
RewriteCond %{QUERY_STRING} !^i=1$
RewriteRule !^(index\.html)?$ check.php [L]
对于除文档根目录(和/index.html
)之外的所有不包含查询字符串i=1
的请求,请重写为check.php
请注意,这是一个内部重写,而不是外部重定向。您是否明确需要同时重定向
/
和/index.html
?是否应该重定向诸如/?i=2
之类的URL?这是外部重定向还是内部重写?我需要重定向到check.php所有内容,example.com、example.com/index.html和example.com/?I=1除外。不需要重定向诸如/?i=2之类的URL“不需要重定向诸如/?i=2之类的URL”-虽然您没有明确地将其作为要排除的URL之一包括在内,因此现在将重定向此URL,除非您希望排除所有i=
?是否明确地需要重定向/
和/index.html
?是否应该重定向诸如/?i=2
之类的URL?这是外部重定向还是内部重写?我需要重定向到check.php所有内容,example.com、example.com/index.html和example.com/?I=1除外。无需重定向诸如/?i=2之类的URL“无需重定向诸如/?i=2之类的URL”-尽管您尚未明确将此作为要排除的URL之一,因此现在将重定向此URL,除非您希望排除所有i=
?谢谢您的回答。尝试了这个,但如果我尝试example.com或example.com/?=1,它会将我重定向到check.php。我是否应该以某种方式屏蔽问号?“或example.com/?=1”-您大概是指“I=1”?“重定向”是指您被物理重定向到check.php
(即您在地址栏中看到的)?您可能看到缓存重定向?尝试清除浏览器缓存。什么是目录索引?index.php
可用吗?“我是否应该以某种方式筛选问号”-不,上面正则表达式中的问号使前面的组成为可选的,它不是字面问号。谢谢你的回答。尝试了这个,但如果我尝试example.com或example.com/?=1,它会将我重定向到check.php。我是否应该以某种方式屏蔽问号?“或example.com/?=1”-您大概是指“I=1”?“重定向”是指您被物理重定向到check.php
(即您在地址栏中看到的)?您可能看到缓存重定向?尝试清除浏览器缓存。什么是目录索引?index.php
可用吗?“我是否应该以某种方式屏蔽问号”-不,上面正则表达式中的问号使前面的组成为可选的,它不是字面问号。