我认为自己合理使用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中!
感谢任何帮助。
答案 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]