mod_rewrite配置不起作用

时间:2017-11-08 14:30:06

标签: apache .htaccess mod-rewrite

我有一个像这样的网址页面:

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版本重定向到干净的网址,以避免出现内容

1 个答案:

答案 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]