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 htaccess将带有查询字符串的旧URL重定向到新的SEO URL_.htaccess_Redirect - Fatal编程技术网

.htaccess htaccess将带有查询字符串的旧URL重定向到新的SEO URL

.htaccess htaccess将带有查询字符串的旧URL重定向到新的SEO URL,.htaccess,redirect,.htaccess,Redirect,我知道这是一个常见的问题,但我花了几个小时寻找答案,我发现了太多不同的解决方案,它们之间差异太大。我想知道实现这一目标的“最佳”方式(最佳实践)是什么 我的htacces文件如下所示: RewriteEngine On # Redirect non-www URLs to www-prefixed ones RewriteCond %{HTTP_HOST} !^www\. RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L] # Re

我知道这是一个常见的问题,但我花了几个小时寻找答案,我发现了太多不同的解决方案,它们之间差异太大。我想知道实现这一目标的“最佳”方式(最佳实践)是什么

我的htacces文件如下所示:

RewriteEngine On

# Redirect non-www URLs to www-prefixed ones
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

# Redirect HTTPS requests to HTTP ones
RewriteCond %{HTTPS} =on
RewriteRule .* http://%{SERVER_NAME}%{REQUEST_URI} [R,L]

# Redirect URLs with trailing slashes to ones without it
RewriteRule ^([^/\.]+)/$ http://%{HTTP_HOST}/$1 [R=301,L]

# Rewrite pretty URLs
RewriteRule ^([^/\.]+)$ index.php?page=$1 [L]
现在需要执行最后一个重要步骤:重定向旧URL,如

http://www.domain.com/index.php?page=abc
http://www.domain.com/?page=abc

对新成员:

http://www.domain.com/abc


我知道我可能应该检查
{QUERY\u STRING}
并将此重定向放在重写URL的最后一行之前,或者可能不?如何正确编写这样的规则?

重定向
http://www.domain.com/index.php?page=abc 及http://www.domain.com/?page=abc
对于新用户,请使用此附加规则:

RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+(?:index\.php)?\?page=([^\s]+) [NC]
RewriteRule ^ /%1? [R=301,L]

是否确实要重定向此
http://www.domain.com/index.php?page=abc
,例如,此
http://www.domain.com/abc
而不是相反?是的,当然。重写已经开始了,现在我需要将那些旧的URL重定向到新的。谢谢你的回答。既然我想了解它是如何工作的,并最终能够在下次自己想出一个解决方案,请您解释一下它的作用和方式好吗?上面的规则作用于
%{THE_REQUEST}
变量,该变量具有完整的URI和查询字符串
^[A-Z]{3,}
匹配GET、PUT等
(?:index\.php)?
匹配
index.php
可选。最后,
\?page=([^\s]+)
匹配您的查询字符串,并将页面参数的值分组在重写规则中使用的
%1
变量中。谢谢,这是正则表达式和聪明的重写规则的一个很好的用法,我不知道我能用这种方式编写它。