Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.htaccess 如何将所有请求重定向到check.php,sample.com/index.html和sample.com/?i=1除外_.htaccess_Redirect_Mod Rewrite - Fatal编程技术网

.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
可用吗?“我是否应该以某种方式屏蔽问号”-不,上面正则表达式中的问号使前面的组成为可选的,它不是字面问号。