mod-rewrite не устанавливает переменную строки запроса - PullRequest
1 голос
/ 25 февраля 2020

Заголовок говорит все о моем вопросе.

Мой .htaccess:

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} -f

RewriteRule ^series/([0-9a-zA-Z_-]+)/([0-9]+)/([0-9]+) series.php?seriesID=$1&season=$2&episodeID=$3
RewriteRule ^series/([0-9a-zA-Z_-]+)/([0-9]+) series.php?seriesID=$1&season=$2
RewriteRule ^series/([0-9a-zA-Z_-]+) http://my-domain.com/series/$1/1
RewriteRule ^series$ series.php

Первый RewriteRule не работает. Например, когда я вызываю http://my-domain.com/series/my-series/1/1, переменная GET episodeID не устанавливается, хотя я думаю, что я определил ее правильно.

1 Ответ

0 голосов
/ 26 февраля 2020

Похоже, у вас конфликт с MultiViews. При включенном MultiViews mod_negotiation выдаст внутренний подзапрос для series.php (добавив расширение файла к исходному запросу) без строки запроса до того, как mod_rewrite сможет перезаписать URL-адрес с параметрами строки запроса.

Попробуйте отключить MultiViews в верхней части вашего .htaccess файла:

Options -MultiViews

Вы также должны удалить два условия:

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} -f

Они применимо только к первой следующей директиве RewriteRule. Но они, похоже, не применяются к этим правилам в любом случае?

RewriteRule ^series/([0-9a-zA-Z_-]+) http://my-domain.com/series/$1/1

Это 3-е правило также вызовет внешнее перенаправление 302. Похоже, это должно быть «похоже» на предыдущее правило. Например:

RewriteRule ^series/([0-9a-zA-Z_-]+) series.php?seriesID=$1&season=1 [L]

И вы должны включить флаг L в каждую из этих директив RewriteRule, чтобы предотвратить обработку оставшихся директив.

...