考虑到以下规则,如何按顺序重写它们有一个尾部斜杠?我必须提到我只能编辑.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/
。
答案 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的数字等。)