Не разрешать доступ к странице ошибок через 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
  1. Все запросы к .php файлы перенаправляются на /errors/404.php скрипт.
  2. Все запросы к несуществующим файлам или каталогам перенаправляются на /errors/404.php сценарий (ErrorDocument 404 /errors/404.php Директива применяется в этом случае).
  3. Все прямые запросы /errors/404.php вернуть 403 Запрещенный код состояния.
Другие вопросы по тегам