#apache #.htaccess #mod-rewrite #url-rewriting #friendly-url
Вопрос:
Я должен переписать правила, которые противоречат друг другу. На самом деле, это второе правило, из-за которого первое не работает, даже когда я меняю позиции.
artistmusic.php
From: http://www.example.com/artistmusic?slug=Ben
To: http://www.example.com/Ben/music
artistvideos.php
From: http://www.example.com/artistvideos?slug=Ben
To: http://www.example.com/Ben/videos
Перепишите правило для вышеуказанных URL-адресов.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]*)/([^/]*)$ /artist$2?address=$1 [L]
Это работает так, как и должно быть, пока я не добавлю правило перезаписи для набора URL-адресов ниже.
allsongs.php
From: http://www.example.com/allsongs?standard=popularamp;request=monthly
To: http://www.example.com/songs/popular/monthly
allartists.php
From: http://www.example.com/allartists?standard=popularamp;request=monthly
To: http://www.example.com/artists/popular/monthly
Перепишите правило для второго набора выше.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]*)/([^/]*)/([^/]*)$ /all$1?standard=$2amp;request=$3
Приведенное выше правило работает, но убивает первое.
В чем причина этого? Спасибо.
Ответ №1:
С показанными вами образцами/попытками, пожалуйста, создайте файл правил htaccess следующим образом. Пожалуйста, не забудьте очистить кэш вашего браузера перед тестированием ваших URL-адресов.
RewriteEngine ON
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^songs/([^/]*)/([^/]*)/?$ allsongs.php?standard=$1amp;request=$2 [NC,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^artists/([^/]*)/([^/]*)/?$ allartists.php?standard=$1amp;request=$2 [NC,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]*)/(music|videos)/?$ artist$2.php?slug=$1 [QSA,NC,L]
Общее решение: В случае, если вы не хотите жестко кодировать значения в своих новых правилах, попробуйте выполнить следующее. Убедитесь, что вы используете либо выше, ЛИБО после только 1 за раз.
RewriteEngine ON
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]*)/([^/]*)/([^/]*)/?$ all$1.php?standard=$2amp;request=$3 [QSA,NC,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]*)/([^/]*)/?$ artist$2.php?slug=$1 [QSA,NC,L]
Комментарии:
1. @Busker McGreen Брайан, не могли бы вы, пожалуйста, сообщить мне, сработали ли для вас эти Правила?