我正在使用以下.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
(这需要进一步重写)的文件。