Я использую следующий .htaccess
файл, который работает хорошо, однако я хочу также перенаправлять любые попытки доступа к несуществующим файлам в корневом каталоге и в любом подкаталоге (независимо от того, существует подкаталог или нет) обратно на основное доменное имя.
Я попробовал FallbackResource
, но это привело к ошибкам серии 500.
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^https://xxxxxxxxx.xxxxx/.*$ [NC]
RewriteRule \.(gif|jpg|jpeg|bmp|zip|rar|mp3|flv|swf|png|css|pdf)$ - [F]
# browser requests PHP
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^\ ]+)\.php
RewriteRule ^/?(.*)\.php$ /$1 [L,R=301]
# check to see if the request is for a PHP file:
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^/?(.*)$ /$1.php [L]
ErrorDocument 500 /redirect
ErrorDocument 500 /redirect
ErrorDocument 500 /redirect
ErrorDocument 404 /error
ErrorDocument 401 /redirect
ErrorDocument 403 /redirect
Любая помощь будет высоко оценена.
решение1
FallbackResource
приводит к URL-адресувнутренне переписанов другой файл. Однако я бы подумал, чтовнешнее перенаправлениебудет предпочтительнее в этой ситуации? Кроме того, FallbackResource
может конфликтовать с вашими существующими директивами mod_rewrite. (Однако было бы полезно увидеть ваше использование FallbackResource
in-place, так как это мог быть ваш синтаксис, который был ошибкой?)
Попробуйте что-то вроде следующего после последней директивы mod_rewrite (перед вашими ErrorDocument
директивами):
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ / [QSD,R=302,L]
Выше говорится... если запрос не сопоставляется с файлом и не сопоставляется с каталогом, то перенаправить в корень документа (временный 302). Требуется QSD
удалить любую строку запроса из запроса.
В стороне:Это не рекомендуется с точки зрения SEO (или пользователей), если это имеет значение.
ErrorDocument 500 /redirect ErrorDocument 500 /redirect ErrorDocument 500 /redirect ErrorDocument 404 /error ErrorDocument 401 /redirect ErrorDocument 403 /redirect
(Кроме ненужного определения документа об ошибке 500 более одного раза...)документуказанный в ErrorDocument
директиве должен быть относительно корняфайловая системапуть. например. /redirect.php
(Но это на самом деле не так)перенаправитьне так ли?) Вероятно, у вас на самом деле нет файла с именем /redirect
(что потребовало бы дальнейшего переписывания).