.htaccess, выбрасывающий 404 с буквой P в RewriteRule - PullRequest
0 голосов
/ 16 ноября 2018

Это правило отлично работает:

RewriteCond %{HTTP_HOST} ^(.*)\.[a-z0-9\-]{3,}\..*
RewriteRule ^t/(.*)$ /p.php?p=$1 [L]

Это почти идентичное правило бросает 404:

RewriteCond %{HTTP_HOST} ^(.*)\.[a-z0-9\-]{3,}\..*
RewriteRule ^p/(.*)$ /p.php?p=$1 [L]

Может ли быть какое-то правило apache или DNS, которое нарушает это? У меня такой же файл .htaccess на старом сервере, и он отлично работает. Новый сервер - CentOS7 с PHP7.

1 Ответ

0 голосов
/ 17 ноября 2018

Как видно из моих комментариев, у вас включена опция MultiViews по умолчанию.

Вы можете отключить ее, поместив эту строку поверх вашего .htaccess:

Options -MultiViews

Параметр MultiViews (см. http://httpd.apache.org/docs/2.4/content-negotiation.html) используется Apache's content negotiation module, который запускает до mod_rewrite модуля и заставляет сервер Apache соответствовать расширениям файлов. Всегда лучше отключить его, покаиспользуя правила mod_rewrite, чтобы избежать непредвиденного поведения, подобного этому.

например, /file - это URI, и в корне документа существует имя файла file.php, тогда Apache может найти соответствующий файл и обработать его вместо сопоставления с вашим.править.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...