htaccess 与不存在的目录中不存在的文件有关的问题

htaccess 与不存在的目录中不存在的文件有关的问题

我正在使用以下.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,因为可能是您的语法出了问题?)

ErrorDocument在最后一个 mod_rewrite 指令之后(在指令之前),尝试如下操作:

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(这需要进一步重写)的文件。

相关内容