Mod_rewrite-несколько страниц - PullRequest
0 голосов
/ 02 ноября 2009

У меня есть два URL, которые я хотел бы переписать:

  1. /artist.php?name=x => /x

  2. /albums.php?title=y => /y

Это то, что я положил в файл .htaccess:

RewriteEngine On
RewriteRule ^([a-zA-Z0-9_-]+)$ artist.php?name=$1
RewriteRule ^([a-zA-Z0-9_-]+)/$ artist.php?name=$1
RewriteRule ^([a-zA-Z0-9_-]+)$ albums.php?name=$1
RewriteRule ^([a-zA-Z0-9_-]+)/$ albums.php?name=$1

Как мне отредактировать файл, чтобы URL album.php также выполнялся? (Работает только первый.) Спасибо за вашу помощь.

Ответы [ 2 ]

3 голосов
/ 02 ноября 2009

У вас есть дубликаты шаблонов как для исполнителя, так и для альбома, поэтому они не могут работать одновременно! Во всяком случае, не с mod_rewrite. (Ваше веб-приложение может проверить наличие исполнителя или альбома с указанным параметром name и решить, какой из них предназначен, но это выходит за рамки простого примера mod_rewrite.)

В URL-адресе должно быть что-то еще, чтобы различать исполнителя и альбом, например:

RewriteRule ^/artist/([a-zA-Z0-9_-]+)/?$ artist.php?name=$1
RewriteRule ^/album/([a-zA-Z0-9_-]+)/?$ albums.php?name=$1

Также обратите внимание, что я сократил ваши 4 правила перезаписи до 2, используя /? (? - это квантификатор, означающий «ноль или единица»), чтобы разрешить URL с косой чертой или без нее. Но, по моему мнению, было бы лучше выбрать один или другой, чтобы не иметь 2 URL для одной страницы.

0 голосов
/ 24 февраля 2010
RewriteRule ^/artist/([a-zA-Z0-9_-]+)/?$ artist.php?name=$1 [L]
RewriteRule ^/album/([a-zA-Z0-9_-]+)/?$ albums.php?name=$1 [L]
...