2009-08-28 114 views
0

考慮到以下規則,我如何重寫它們才能得到尾部斜線?我必須提及,我只能編輯.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

添加另一條規則重寫的東西,不以斜線結束,其他規則之前:

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

(我可能borked上一個確切的正則表達式,但你的想法。)

0

試試這個規則在你的其他規則面前:

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

但你也應該用至少更換.*修改現有規則3210或更好[^/]+

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號等)。

+0

這幾乎是我想要的,但我有一些規則,我不想結尾斜槓。例如這一個:RewriteRule^lyrics /(.*)/(.*).php /artists-lyrics.php?a=$1&c=$2 [QSA,L] 另外,對於這個規則RewriteRule^artists /( 。*)$ /artists.php?l=$1 [QSA,L]當它在PHP中獲得「l」的值時,它具有結尾斜線。就像值是「a」一樣,在PHP中它將是「a /」。 – Psyche 2009-08-28 09:55:07

+0

然後,只需在不希望受到影響的規則之後,並在*規則之前放置尾部斜槓*的重寫規則即可。 – Amber 2009-08-28 09:56:48

+0

@Gumbo,我做了以上所有更改,但是現在它重定向到了一些404.shtml,指出「該頁面沒有正確重定向」。 – Psyche 2009-08-28 10:04:24