Почему errorDocument 404 не ловит, когда каталог не существует, но создан RewriteRule? - PullRequest
1 голос
/ 01 октября 2010

У меня есть в моем htaccess:

Options +FollowSymLinks
Options -Indexes
RewriteEngine On
RewriteRule ^annons/([a-zA-Z0-9_]+)$ ad.php?ad_id=$1 [NC]
ErrorDocument 404 /404.html

Это все работает, за исключением одной проблемы.

Когда я пишу адрес, который не существует, например:

   http://www.domain.com/some_adress_that_doesnt_exist

, затем отображается 404.html.

НО, если я напишу это так:

   http://www.domain.com/annons/some_adress_that_doesnt_exist

(Обратите внимание на / annons / на самом деле не существует, он «создан» в правилах переписывания.)

Это ТОЛЬКО когда я пишу / annons / и затем aURL, который не существует, что 404 не работает.Он работает со всеми другими подкаталогами и комбинациями, но я предполагаю, что у моего rewriterule есть некоторые недостатки ...

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

Ответы [ 2 ]

1 голос
/ 01 октября 2010

Что ж, поскольку такие URL-адреса перезаписываются в реально существующий файл (например, ad.php ), запрошенный файл найден.

Теперь, если ваш ad.phpСценарий решает, что запрошенный ресурс не существует, вам нужно обработать его с помощью PHP, ответив кодом состояния 404, например:

header($_SERVER['SERVER_PROTOCOL'].' 404 Not Found');

После этого вы можете вернуть документ об ошибке, чтобы получитьтот же результат:

readfile('404.html');
0 голосов
/ 01 октября 2010

ТОЛЬКО когда я пишу / annons /, а затем URL, который не существует, 404 не работает.

Как сервер должен знать, какой/annons/ существуют, а какие нет?Вы всегда перенаправляете на ad.php, который существует .Применительно к серверу здесь не происходит 404.

Случай несуществующего объявления - это то, с чем вам нужно будет разобраться в вашем скрипте, например, выбрасывая заголовок HTTP/1.0 404 Not Found и показывая ошибкустр.(или, лучше, используйте переменную SERVER_PROTOCOL, как показывает @Gumbo)

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