我正在使用以下.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
(需要進一步重寫)的檔案。