我有一个像这样的网址页面:
http://example.com/index.php?site=contact
http://example.com/index.php?site=about
所以我尝试创建像
这样的自定义网址http://example.com/contact-the-person
http://example.com/cityname/about
为避免重复内容,第一个网址需要永久重定向到新代码中。
这是我的代码:
RewriteEngine On
RewriteBase /
RewriteCond %{THE_REQUEST} \s/+index\.php?site=contact[\s?] [NC]
RewriteRule ^/contact-the-person [R=301,L]
RewriteRule ^contact-the-person/?$ index.php?site=contact [L,NC]
更新
我将代码更改为
RewriteEngine on
RewriteRule ^cityname/about$ index.php?site=contact
现在可以使用了。我可以用两个链接打开网址
http://example.com/index.php?site=contact
http://example.com/cityname/about
我现在只需要从php版本重定向到干净的网址,以避免出现内容
答案 0 :(得分:1)
摆脱RewriteBase
,如果你的基数是/
,那么这是多余的,只会让事情复杂化。我不确定你RewriteCond
正在做什么,但是你没有必要做你在问题中描述的2次重写,所以也要摆脱它。
使/contact-the-person
工作:
RewriteRule ^/contact-the-person index.php?site=contact [L,NC]
使/cityname/about
工作:
RewriteRule ^/cityname/about index.php?site=about [L,NC]
完整的文件:
RewriteEngine On
RewriteRule ^/contact-the-person /index.php?site=contact [L,NC]
RewriteRule ^/cityname/about /index.php?site=about [L,NC]
更新
要将index.php?site=contact
链接重定向到新的漂亮格式,您还需要进行外部重定向,以便浏览器实际发出新请求,并且浏览器中的URL会发生变化。通过向标志添加R
来做到这一点。 301
指定http响应标头,并确保保留您的链接排名。对于您提供的示例,添加新规则:
RewriteRule ^/index.php?site=contact /contact-the-person [L,R=301]