ErrorDocument и ссылки без расширения не работают вместе

На моем веб-сайте у меня есть следующий код, чтобы опустить расширение страниц php

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^\.]+)$ $1.php [NC,L]

Я также добавил этот код, чтобы показать пользовательские 404 страницы

ErrorDocument 404 /404

Оба они работают независимо, но не вместе. Когда я перехожу по фиктивной ссылке, такой как www.mydomain.com/pagethatdontexist , я хочу увидеть свою страницу 404, вместо этого я вижу ошибку «Файл не найден», которая, я думаю, исходит от сервера, поэтому я получаю 404 на 404 видимо.

Я пробовал перемещать ErrorDocumentвыше и ниже кода удаления расширений, а также пробовал /404.php. Я также попытался создать исключение для 404, например

RewriteCond %{REQUEST_URI} !^/404.php$ [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^\.]+)$ $1.php [NC,L]

Ничего не работает.

Изменить:Когда код расширения удален и я захожу на www.mydomain.com/pagethatdontexist я вижу свою страницу 404. Но если я зайду www.mydomain.com/pagethatdontexist.php , я увижу мягкую ошибку «Файл не найден» с сервера. Возможно, это может дать ключ к пониманию того, что происходит.

1
задан 27 October 2021 в 07:41
1 ответ

Насколько я понимаю, вы используете сервер LiteSpeed, а не Apache? Это должно "работать" на Apache, но не на LiteSpeed ​​из-за того, что серверные переменные не обновляются между внутренними запросами.

Однако в этом нет необходимости, (и вы не должны)опускать расширение файла в самой директиве ErrorDocument. URL-адреса без расширений являются «косметическими» для пользователей. ErrorDocument полностью скрыт от пользователей. Но если вы опустите расширение файла в директиве ErrorDocument, это вызовет дополнительную внутреннюю перезапись после внутреннего подзапроса для документа об ошибке -, которого следует избегать.

Таким образом, вы должны указать расширение файла в директиве ErrorDocument:

ErrorDocument 404 /404.php
0
ответ дан 27 October 2021 в 08:28

Теги

Похожие вопросы