解决给定设置的尾随斜杠问题

时间:2009-08-28 09:42:16

标签: apache .htaccess mod-rewrite

考虑到以下规则,如何按顺序重写它们有一个尾部斜杠?我必须提到我只能编辑.htaccess文件,因此我无权修改网站中的URL。

RewriteRule ^artists/(.*)-p(.*)$ /artists.php?l=$1&p=$2 [QSA,L]
RewriteRule ^artists/(.*)$ /artists.php?l=$1 [QSA,L]
RewriteRule ^lyrics/(.*)/(.*)$ /artists-albums.php?a=$1&b=$2 [QSA,L]
RewriteRule ^lyrics/(.*)$ /artists-details.php?a=$1 [QSA,L]
RewriteRule ^p-(.*)-(.*)$ /index.php?p=$1&q=$2 [QSA,L]

因此,如果有人正在查找/lyrics/abba,则必须自动重定向到/lyrics/abba/

2 个答案:

答案 0 :(得分:0)

在其他规则之前添加另一条规则来重写不以斜杠结尾的内容:

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

(我可能已经确认了那个正确的正则表达式,但你明白了。)

答案 1 :(得分:0)

在您的其他规则前尝试此规则:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond $0 !.*\.php$
RewriteRule .*[^/]$ /$0/ [L,R=301]

但您也应该修改现有规则,将.*替换为至少.+或更好[^/]+

RewriteRule ^artists/([^/-]+)-p([^/]+)$ /artists.php?l=$1&p=$2 [QSA,L]
RewriteRule ^artists/([^/]+)$ /artists.php?l=$1 [QSA,L]
RewriteRule ^lyrics/([^/]+)/([^/]+)$ /artists-albums.php?a=$1&b=$2 [QSA,L]
RewriteRule ^lyrics/([^/]+)$ /artists-details.php?a=$1 [QSA,L]
RewriteRule ^p-([^/-]+)-([^/]+)$ /index.php?p=$1&q=$2 [QSA,L]

如果可能,您应该使用更具体的模式([0-9]+代表数字,[1-9][0-9]*代表没有0的数字等。)