我在网站上创建 301 重定向时遇到问题。当我创建重定向时,浏览器显示完整的qherysting而不是定向页面。
例如。我想直接/联系/联系我们
我得到的是:
/联系我们?页面=联系我们
这是我的.htaccess的代码:
RewriteEngine on
RewriteCond %{HTTP_HOST} !^www'.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
RewriteBase /
redirect 301 /contact /contact-us
RewriteRule ^([^/'.]+)/?$ index.php?page=$1 [L]
知道为什么会这样吗?
这是一个
mod_alias/mod_rewrite冲突。路径处理管道分别处理这两件事。您可以坚持使用mod_rewrite并替换
redirect 301 /contact /contact-us
跟
RewriteRule ^contact$ /contact-us [L,R=301]
因此,重写一旦到达此处就会停止,并且永远不会应用最后一个规则。否则,mod_alias将重定向 URL,但直到它通过 mod_rewrite 运行 URI,因此你会得到这个通配的重定向。如果您不介意尾随?,也可以将其添加到重定向目标的末尾:
redirect 301 /contact /contact-us?
这样就不会追加查询字符串。
这样做:
重定向 301/联系 http://www.domain.com/contact-us
使用完整的网址。
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^yoursite'.com [NC]
RewriteRule (.*) http://www.%{HTTP_HOST}%{REQUEST_URI}
RewriteRule ^contact[/]?$ /contact-us [R=301]
RewriteRule ^([^/'.]+)[/]?$ /index.php?page=$1 [L]