使用 mod_rewrite / RewriteRule 创建 SEO 友好的 URL

Using mod_rewrite / RewriteRule to create SEO friendly URLs

我试图让这个不友好 link:

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

要在使用我的网站时显示为友好 link:

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=&ID=&PHOTOID=
RewriteRule homedetails/(.*)/ID/(.*)/PHOTOID/(.*) featured1new.php?homedetails=&ID=&PHOTOID=

问题是 link 仍然在网站上显示旧的方式,但是,如果我直接在浏览器中键入新的 RewriteRule 方式,它工作正常。所以其中一部分也在按照我需要的方式工作。

我是否应该将网站中的 html 代码更改为 match/use RewriteRule? (在这个网站上阅读了一段时间后,我认为我不需要这样做)感谢您的帮助

The problem is the link still displays the old way in the website

您的规则仅允许 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=&ID=&PHOTOID= [L]

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