Не разрешать доступ к странице ошибок через URL с помощью mod_rewrite
У меня есть пользовательская страница ошибок на /errors/404.php
и я хотел бы, чтобы это можно было использовать, когда apache не может найти файл, но я бы хотел, чтобы его нельзя было использовать, просто запросив URL http://mywebsite/error/404.php
,
В настоящее время у меня есть правило, которое блокирует доступ ко всем моим php-файлам (потому что я использую перезапись URL-адресов для создания удобных для пользователя URL-адресов), но это также мешает apache читать страницу ошибок из-за того, что страница ошибок соответствует правилу, запрещающему запретить доступ к файлам php.
Как бы я сделал это правильно?
Содержание /.htaccess
:
RewriteEngine On
RewriteRule ^home/?$ /index.php [NC,L]
RewriteRule ^lessons/?$ /lessons.php [NC,L]
# Don't allow access to the actual php files.
RewriteCond %{THE_REQUEST} \.php[\ /?].*HTTP/ [NC]
RewriteRule ^.*$ - [R=404,L]
ErrorDocument 404 /errors/404.php
1 ответ
Вы можете попробовать это вместо этого:
# Don't allow access to the actual php files.
RewriteCond %{THE_REQUEST} \.php[\ /?].*HTTP/ [NC]
RewriteCond %{REQUEST_URI} !/errors/404\.php [NC]
RewriteRule ^.*$ - [R=404,L]
RewriteCond %{THE_REQUEST} \s/errors/404\.php [NC]
RewriteRule .? - [F]
ErrorDocument 404 /errors/404.php
- Все запросы к
.php
файлы перенаправляются на/errors/404.php
скрипт. - Все запросы к несуществующим файлам или каталогам перенаправляются на
/errors/404.php
сценарий (ErrorDocument 404 /errors/404.php
Директива применяется в этом случае). - Все прямые запросы
/errors/404.php
вернуть 403 Запрещенный код состояния.