使用mod_rewrite / RewriteRule创建SEO友好URL

时间:2015-01-24 21:50:45

标签: .htaccess mod-rewrite url-rewriting

我正试图得到这个不友好的链接:

http://test.mysite.com/featured1new.php?homedetails=12-Magnolia-Court-Branson-MO-65616&ID=11315943&PHOTOID=20140401022411163178000000

在使用我的网站时显示为此友好链接:

http://test.mysite.com/homedetails/12-Magnolia-Court-Branson-MO-65616/ID/11315943/PHOTOID/20140401022411163178000000

这是主目录中我的.htaccess文件中的代码:

Options +FollowSymLinks -MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule homedetails/(.*)/ID/(.*)/PHOTOID/(.*)/ featured1new.php?homedetails=$1&ID=$2&PHOTOID=$3
RewriteRule homedetails/(.*)/ID/(.*)/PHOTOID/(.*) featured1new.php?homedetails=$1&ID=$2&PHOTOID=$3

问题是链接仍然显示网站中的旧方式,但是,如果我将新的RewriteRule方式直接键入浏览器,它可以正常工作。所以这部分工作方式也是我需要的。

我是否应该更改网站上的html代码以匹配/使用RewriteRule? (在这个网站上阅读了很长一段时间后,我认为我不需要这样做)感谢您的帮助

1 个答案:

答案 0 :(得分:0)

  

问题是链接仍然显示网站上的旧方法

您的规则只允许new url format并在内部将其重写为old format等效值。

如果您希望old format重定向到new format(没有无限循环),则必须添加一些代码。

您可以用这个替换当前代码

Options +FollowSymLinks -MultiViews
RewriteEngine On

RewriteCond %{THE_REQUEST} \s/featured1new\.php\?homedetails=([^&\s]+)&ID=([^&\s]+)&PHOTOID=([^&\s]+)\s [NC]
RewriteRule ^ /homedetails/%1/ID/%2/PHOTOID/%3? [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^homedetails/([^/]+)/ID/([^/]+)/PHOTOID/([^/]+)/?$ /featured1new.php?homedetails=$1&ID=$2&PHOTOID=$3 [L]

注意:即使此代码重定向old format,最好用新格式替换您的链接