使用mod_rewrite进行SEO友好网址

时间:2015-08-20 03:22:47

标签: .htaccess mod-rewrite redirect seo

我认为自己合理使用PHP。然而,当谈到mod_rewrite时,我完全失败了。

我的网址结构如下:

http://site/something/something-else/the-actual-page/

重定向到:

http://site/index.php?page=the-actual-page

它只是最后一个'文件夹'传递给脚本。前面的文件夹' (如果有的话)用于SEO和结构目的。

如果有前面的文件夹"促销"然后它重定向到一个单独的文件。这与以下几行有关:

http://site/promotion/campaign-name/

重定向到

http://site/promotion.php?campaign=campaign-name

我使用以下代码来实现此目的:

<IfModule mod_rewrite.c>
Options +FollowSymLinks
RewriteEngine On
RewriteRule ^promotion/(.*)/$ promotion.php?params=$1 [L]
RewriteRule ^(.*) index.php?page=$1 [L]
</IfModule>

这可以按预期工作,当没有尾部斜杠时,链接正确地重定向除外。例如

http://site/something/thepage/

将起作用,而

http://site/something/thepage

不会。

要解决此问题,我尝试设置301,将没有尾部斜杠的任何URI重定向到带有斜杠的URI。

下面的代码(位于其他规则之上)在一定程度上起作用,但我丢失了文件夹数据。

代码:

RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1/ [L,R=301]

问题?

http://site/something/thepage

重定向到

http://site/thepage/

我担心世界上所有的Google搜索都没有帮助我,因为我根本无法将我的大脑包裹在mod_rewrite中!

感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

你最好使用它:

RewriteEngine On
RewriteCond %{REQUEST_URI} /+[^\.]+$
RewriteRule ^(.+[^/])$ %{REQUEST_URI}/ [R=301,L]
# ... your other rerites

如果您想要反转它并删除尾部斜杠,请使用:

RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [R=301,L]

然后您需要相应地更改重写:

RewriteRule ^promotion/(.*)$ /promotion.php?params=$1 [L]