Custom 404 Rewrite + исключить основной каталог из перезаписи - PullRequest
0 голосов
/ 07 декабря 2011

Я использую .htaccess для отображения моей страницы 404, показывая вместо запрошенного URL-адреса в браузере вместо фактического URL-адреса 404.Для этого у меня есть эта строка в моем .htaccess:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /404.php [L]

. Это хорошо работает, когда я перехожу к несуществующему файлу (например, blalba.php).

Проблемаэто: Когда я пытаюсь перейти на мой основной сайт dir (т.е. http://example.com/), я вижу страницу 404.Когда я непосредственно перехожу к моему файлу индекса (то есть http://example.com/index.php), все работает просто отлично.


Как я могу изменить .htaccess на , а не перенаправить мой основной dir ?

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

ОТВЕТ:

См. Ответ ниже и добавление RewriteCond %{REQUEST_FILENAME} !-d решило проблему!

Ответы [ 2 ]

1 голос
/ 10 августа 2012

Следующее правило перенаправляет в файл contact.html с темой = ссылка на сбойную страницу

    ErrorDocument 404 /contact.php
    RewriteRule ^contact\.php$ /contact.html?subject=%{REQUEST_FILENAME} [L,R]
1 голос
/ 07 декабря 2011

Я почти уверен, что вы просто забыли сообщить apache, что ему нужно "default" для index.php, если в URL ничего не указано точно.Вот как вы это делаете:

<IfModule dir_module>
    DirectoryIndex index.html index.php
</IfModule>

Другой ответ о 404

У меня была такая же проблема несколько дней назад.Все просто: назначьте документ об ошибке 404.php.Всякий раз, когда есть 404, сервер делает внутреннее перенаправление, чтобы он мог правильно обработать веб-страницу.

Итак, вот пример моей конфигурации vhost:

<VirtualHost *>
    ServerName x.fr
    ...
    ErrorDocument 404 /404.php
    # activate rewrite engine:
    RewriteEngine On

    # *IMMEDIATELY* treat 404
    # if 404.php then stop immediately
    RewriteRule /404.php - [QSA,L]

    # From now on your can apply all your rules:
    ...
    ...
    ...
    # Sample of how I do a 404:
    RewriteCond %{ENV:PATH_LOCAL} notfound
    # "not found" 404 :
    RewriteRule .* - [R=404,L]
</VirtualHost>

Со всем, что вам нужнобыть в состоянии создавать свои собственные программы перезаписи с надлежащей «фильтрацией» 404.

Надеюсь, это поможет!

...