Проблема с перезаписью URL для той же страницы .php - PullRequest
0 голосов
/ 25 августа 2009

У меня есть некоторые проблемы с правилом mod_rewrite. Я должен сделать 2 типа ссылок (первый - для артистов, у которых есть альбом, второй - для тех, у кого его нет): 1) /lyrics/artist-name/album-name/song-name.php 2) /lyrics/artist-name/song-name.php

Мой код выглядит так:

RewriteRule ^lyrics/(.*)/(.*)/(.*).php$ /artists-lyrics.php?a=$1&b=$2&c=$3 [QSA,L]
RewriteRule ^lyrics/(.*)/(.*).php$ /artists-lyrics.php?a=$1&b=$2 [QSA,L]

К сожалению, работает только первое правило. Как я могу изменить их, чтобы они оба работали?

Спасибо.

Ответы [ 3 ]

1 голос
/ 25 августа 2009

Вы должны сделать свой шаблон более конкретным. Попробуйте использовать [^/]+ (один или несколько символов, кроме /) вместо .* (любые символы любой длины):

RewriteRule ^lyrics/([^/]+)/([^/]+)/([^/]+)\.php$ /artists-lyrics.php?a=$1&b=$2&c=$3 [QSA,L]
RewriteRule ^lyrics/([^/]+)/([^/]+)\.php$ /artists-lyrics.php?a=$1&b=$2 [QSA,L]
0 голосов
/ 25 августа 2009

Как правило, вы хотите установить свой атом как можно более ограничительным, чтобы избежать непредвиденных последствий. В приведенном ниже примере принимаются только буквенно-цифровые символы (это, вероятно, то, что вы хотите). Знак + обозначает один или несколько, тогда как * обозначает ноль или более.

RewriteRule ^lyrics/([a-z0-9]+)/([a-z0-9]+)/([a-z0-9]+).php$ /artists-lyrics.php?a=$1&b=$2&c=$3 [QSA,L]
RewriteRule ^lyrics/([a-z0-9]+)/([a-z0-9]+).php$ /artists-lyrics.php?a=$1&b=$2 [QSA,L]
0 голосов
/ 25 августа 2009

Второе правило никогда не работает, потому что первое правило соответствует «/lyrics/artist-name/song-name.php», а также: (. *) Означает: любое количество символов (даже ноль).

Без возможности проверить это может работать:

RewriteRule ^lyrics/([^\]+)/([^\]+).php$ /artists-lyrics.php?a=$1&b=$2 [QSA,L]
RewriteRule ^lyrics/([^\]+)/([^\]+)/([^\]+).php$ /artists-lyrics.php?a=$1&b=$2&c=$3 [QSA,L]
...