.htaccess
ErrorDocument 404
使用重寫規則時沒有重定向。出現500 Internal Server Error。
沒有 RewriteRule
時,ErrorDocument
正常運作。
我的程式碼
#RewriteEngine On <IfModule mod_rewrite.c> RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ /stores/ [NC,L] ErrorDocument 404 /404.html </IfModule>
P粉6052337642024-01-11 09:26:16
這個規則的「問題」是,如果你要求一個不存在的文件,並且該文件在/subdirectory/子目錄中也不存在,那麼它會導致無限重寫循環(因此你看到的是500 Internal Server Error),因為它會嘗試進行以下重寫:
你其實沒有說明你想要實現什麼,但我假設/stores是一個「隱藏」的子目錄,你打算重寫到/stores子目錄中的實際檔案。這是唯一的方式,這樣的規則才能與在Apache中定義的ErrorDocument 404指令一起運作。
因此,在重寫/stores子目錄時,你需要先檢查請求是否會對應到一個實際的文件,然後再發出重寫。這樣,任何不存在且不映射到/stores子目錄中的檔案的請求都會傳遞到Apache定義的404 ErrorDocument。
例如,嘗試使用以下程式碼:
ErrorDocument 404 /404.html RewriteEngine On # 如果该目录中存在文件,则将请求重写到“/stores”目录 RewriteCond %{DOCUMENT_ROOT}/stores/ -f RewriteRule (.+) stores/ [L] # (可选)将根目录的请求重写为“/stores/” RewriteRule ^$ stores/ [L]
不需要<IfModule>
容器(但你將RewriteEngine指令放在了這個容器外面,這樣做毫無意義)。
如果.htaccess檔案位於文檔根目錄中,則不需要RewriteBase指令。
在結構上,最好先定義ErrorDocument。