Рейтинг:1

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

флаг cn

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

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
Правило перезаписи ^([^\.]+)$ $1.php [NC,L]

Я также добавил этот код для отображения пользовательских страниц 404.

ОшибкаДокумент 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
Правило перезаписи ^([^\.]+)$ $1.php [NC,L]

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

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

Рейтинг:0
флаг cn

Я думаю, что ваше регулярное выражение не соответствует тому, что вы хотите. Со следующим я могу обрабатывать URL-адрес, например:

  • /моя страница
  • /моя страница/мой идентификатор

Регулярное выражение:

    RewriteEngine On # Активировать модуль Rewrite
    Правило перезаписи ^/(\w+)\/?$ /$1.php [NC,L]
    Правило перезаписи ^/(\w+)\/(\d+)$ /$1.php?id=$2
Рейтинг:0
флаг kz

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

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

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

Документ об ошибке 404 /404.php
Whip avatar
флаг cn
Я использую Апач. Это должно и работает на xampp, но не на моем сервере. Похоже, что `ErrorDocument` игнорируется, когда присутствует код удаления расширения. Разве это не две совершенно разные директивы? Что здесь может мешать?

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.