2009-08-28 9 views
0

次のルールを考慮して、スラッシュを後で書き直すにはどうすればよいですか? .htaccessファイルのみを編集できるので、WebサイトのURLを変更するアクセス権がないことに言及する必要があります。誰かが/lyrics/abbaを見上げている場合指定されたセットアップの後続スラッシュ問題を解決する

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/にリダイレクトする必要があります。

答えて

0

他のルールの前に、スラッシュで終わっていない事を書き換えるために別のルールを追加します。

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

(私は、その1つの上の正確な正規表現を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]+、0なしの数字のため[1-9][0-9]*、など)。

+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

+0

それから、影響を受けたくないルールの後に、*あなたがやるルールの前に、末尾のスラッシュ*の書き換えルールを入れてください。 – Amber

+0

@ Gumbo、私は上記のすべての変更を加えましたが、現在は "ページが正しくリダイレ​​クトされていません"という404.shtmlにリダイレクトされます。 – Psyche

関連する問題