Estou usando o .htaccess
arquivo a seguir, que funciona bem, no entanto, também quero encaminhar quaisquer tentativas de acessar arquivos inexistentes no diretório raiz e em qualquer subdiretório (se o subdiretório existe ou não) de volta para o nome de domínio principal.
Eu tentei FallbackResource
, mas isso resultou em erros da série 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
Qualquer ajuda seria muito apreciada.
Responder1
FallbackResource
resulta no URL sendoreescrito internamentepara outro arquivo. No entanto, eu teria pensado que umredirecionamento externoseria preferível nesta situação? Além disso, FallbackResource
pode entrar em conflito com suas diretivas mod_rewrite existentes. (No entanto, teria sido útil ver o uso do FallbackResource
in-place, pois poderia ter sido a sua sintaxe a culpada?)
Tente algo como o seguinte, após sua última diretiva mod_rewrite (antes de suas ErrorDocument
diretivas):
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ / [QSD,R=302,L]
O texto acima diz... se a solicitação não mapear para um arquivo e não mapear para um diretório, redirecione para a raiz do documento (temporário 302). É QSD
necessário remover qualquer string de consulta da solicitação.
Aparte:Isso não é recomendado do ponto de vista de SEO (ou dos usuários), se isso for uma preocupação.
ErrorDocument 500 /redirect ErrorDocument 500 /redirect ErrorDocument 500 /redirect ErrorDocument 404 /error ErrorDocument 401 /redirect ErrorDocument 403 /redirect
(Além de definir desnecessariamente o documento de erro 500 mais de uma vez...) odocumentoespecificado na ErrorDocument
diretiva deve ser relativo à raizsistema de arquivocaminho. por exemplo. /redirect.php
(Mas isso na verdade nãoredirecionarnão é?) Presumivelmente, você não tem um arquivo chamado /redirect
(isso exigiria reescrita adicional).