301 重定向在 htAccess 文件中


301 redirect in htaccess file

我在网站上创建 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]