2017-05-04 577 views
1

我想重定向到PHP文件的所有「404」錯誤。我使用Wordpress的.htaccess作爲第一步。工作,但不是當路徑是一個文件夾時,意味着,在末尾有一個「/」,我得到一個Forbidden錯誤。Apache htaccess重定向所有404(文件和文件夾)

RewriteEngine On 
RewriteBase/
RewriteRule ^index\.php$ - [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /includes/redir.php [L] 

如果我嘗試:

http://example.com/anything 

按預期工作,重定向到我的redir.php。但如果我嘗試:

http://example.com/anything/ 

返回一個禁止的錯誤。

我需要做什麼來重定向到redir.php所有不存在的東西? 我需要更改httpd.conf?我需要一個「ErrorDocument 404 /includes/redir.php」行?

+2

只是爲了澄清,這實際上不是一個WordPress網站? – MrWhite

+1

不,這是一個PHP站點,我只是使用Wordpress站點的.htaccess作爲起點。 – Arvy

+1

在你上面的例子中,'/ anything'是一個物理目錄嗎?否則,你不應該得到一個403禁止錯誤。 – MrWhite

回答

1

我需要一個「ErrorDocument 404 /includes/redir.php」行嗎?

是的,使用這樣的ErrorDocument指令比嘗試手動重定向/手動重寫到錯誤文檔更好。

定義的ErrorDocument將返回正確的HTTP狀態碼(不必手動執行此操作)。並且PHP將在與此錯誤有關的超全局變量$_SERVER中設置其他變量。


如果你特別想改寫到一個文件上的404,而不是,那麼你可以這樣做:

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule^/includes/redir.php [L] 

但不是當路徑是一個文件夾,意味着,有一個「/ 「最後,我得到了一個禁止錯誤。

如果URL「看起來」像一個文件夾,除非URL映射到磁盤上的物理文件夾,這真的沒關係。只有這樣,如果沒有目錄索引文件,你會得到403禁止訪問。

+1

就是這樣!需要ErrorDocument並刪除RewriteBase。謝謝! – Arvy

+1

「RewriteBase」指令實際上並沒有在這方面做任何事情。 'RewriteBase'指令只設置用於相對路徑(不以斜槓或方案開始)的路徑_substitutions_。例如'RewriteRule^redir.php'('redir.php'是_relative_,'/ redir.php'不是)。如果你沒有相對路徑,那麼這是多餘的。 (你在'RewriteBase'指令中看到了很多混淆,但這只是它。) – MrWhite

+1

謝謝你的信息。無論如何,使用你的指令,它現在正在工作。我也試過其他的東西,現在我不確定是否有另一件事解決了這個問題。但你的幫助和信息真的很感激。 – Arvy