Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.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
Php 带参数的URL的htaccess 301重定向_Php_Apache_.htaccess_Mod Rewrite_Redirect - Fatal编程技术网

Php 带参数的URL的htaccess 301重定向

Php 带参数的URL的htaccess 301重定向,php,apache,.htaccess,mod-rewrite,redirect,Php,Apache,.htaccess,Mod Rewrite,Redirect,我的htaccess文件中有以下内容,它采用类似于www.example.com/Page.php?id=About的URL,并将其转换为www.example.com/About。唯一的问题是,当我在htaccess中设置Redirect 301s时,旧URL没有重定向到新URL(我理解这是因为您不应该在基本Redirect 301s中传递参数——我在下面尝试的基本重定向示例) 问题在于,新的URL不一定只删除当前id并用小写版本替换它。例如,我还想: Redirect 301 /Page.p

我的htaccess文件中有以下内容,它采用类似于www.example.com/Page.php?id=About的URL,并将其转换为www.example.com/About。唯一的问题是,当我在htaccess中设置Redirect 301s时,旧URL没有重定向到新URL(我理解这是因为您不应该在基本Redirect 301s中传递参数——我在下面尝试的基本重定向示例)

问题在于,新的URL不一定只删除当前id并用小写版本替换它。例如,我还想:

Redirect 301 /Page.php?id=Example http://www.example.com/example-page
我希望保留当前重写URL的功能,但也希望对旧URL的任何访问重定向到新URL(即更新Google索引)。访问www.example.com/Page.php?id=About目前仍然有效,但显示的页面没有内容

Options +FollowSymLinks
RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^([a-zA-Z0-9\-]+)/?$ Page.php?id=$1
RewriteRule ^([a-zA-Z0-9\-]+)/([a-zA-Z0-9\-]+)/?$ Page.php?id=$1&tab=$2
RewriteRule ^([a-zA-Z0-9\-]+)/([a-zA-Z0-9\-]+)/([a-zA-Z0-9\-]+)/?$ Page.php?id=$1&tab=$2&tabid=$3

如果将此规则添加到.htaccess中,则它将完成重定向的工作。它将把?id=About添加到重定向到/About。如果您在2.4.0或更高版本上运行,则可以添加QSD标志以放弃重定向中的查询字符串

RewriteCond %{QUERY_STRING} ^id=About$
RewriteRule ^page.php /about [NC,R,L]

如果将此规则添加到.htaccess中,则它将完成重定向的工作。它将把?id=About添加到重定向到/About。如果您在2.4.0或更高版本上运行,则可以添加QSD标志以放弃重定向中的查询字符串

RewriteCond %{QUERY_STRING} ^id=About$
RewriteRule ^page.php /about [NC,R,L]

谢谢你的建议。不幸的是,访问并没有重定向到?规则是针对带有小写字母p的page.php的。我刚刚用NC标志更新了答案,使规则不区分大小写。现在它应该匹配page.php和page.phpThanks,差不多了,我得到:现在。是否可以不将?id=About放在末尾?@SteveR:将最后一行改为:
RewriteRule^page.php/About?[NC,R,L]
@anubhava不会将QSD标志(如果使用版本2.4.0+)也删除查询字符串(没有2.4可供测试),谢谢您的建议。不幸的是,访问并没有重定向到?规则是针对带有小写字母p的page.php的。我刚刚用NC标志更新了答案,使规则不区分大小写。现在它应该匹配page.php和page.phpThanks,差不多了,我得到:现在。是否可以不将?id=About放在末尾?@SteveR:将最后一行改为:
RewriteRule^page.php/About?[NC,R,L]
@anubhava不会将QSD标志(如果使用版本2.4.0+)也删除查询字符串(没有可测试的2.4)