2014-11-24 63 views
1

我有一個可以由服務器重定向頁面無法對404不改變URL

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ hidden_folder/$1 

現在訪問的隱藏文件夾hidden_folder,我想所有重定向頁面無法到404錯誤頁面的內容。

插圖1:當用戶試圖去這裏http://website.com/some_unavailable_uri,頁面的URL不會改變,但內容將是/error/404.php的一個

插圖2http://www.apple.com/test 。此頁面不存在,url不會更改,但內容顯示錯誤。

基本上應該是if file does not exist, then redirect content。我嘗試了一些東西,但沒有成功。

首先嚐試:

RewriteEngine On 
RewriteCond hidden_folder%{REQUEST_URI} -f # %{REQUEST_URI} already has "/" at its beginning 
RewriteRule ^.*$ error/404.php [NC,L] 

第二個嘗試:

RewriteEngine On 
RewriteCond %{DOCUMENT_ROOT}hidden_folder%{REQUEST_URI} -f 
RewriteRule ^.*$ error/404.php [NC,L] 

任何想法?

回答

0

謝謝Outlyer。

實際工作的代碼是:

RewriteEngine On 

# If the requested file is not in hidden_folder as a file 
RewriteCond %{DOCUMENT_ROOT}hidden_folder%{REQUEST_URI} !-f 

# AND 

# If the requested file not is in hidden_folder as a folder 
RewriteCond %{DOCUMENT_ROOT}hidden_folder%{REQUEST_URI} !-d 

# AND 

# If the requested file is not in root as a file 
RewriteCond %{REQUEST_FILENAME} !-f 

# AND 

# If the requested file is not in root as a folder 
RewriteCond %{REQUEST_FILENAME} !-d 

# AND 

# ???  
RewriteCond %{REQUEST_URI} !^/hidden_folder 

# THEN Redirect content 
RewriteRule ^(.*)$ error/404.php [L] 

#################################################### 

# Enable the deletion of hidden_folder in urls 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ hidden_folder/$1 [L] 
+0

'RewriteCond%{REQUEST_URI}!^/hidden_​​folder'中的'hidden_​​folder'訪問文件:這意味着「如果請求的路徑不以'/ hidden_​​folder'開頭「 – outlyer 2014-11-25 02:28:20

0

看起來你只需要一個簡單的ErrorDocument在目標中使用http://,因爲這會導致瀏覽器中的URL發生更改。

使用此線頂部您的.htaccess的:

ErrorDocument 404 /error/404.php 

而且不要忘了註釋掉你重寫規則做相同。

1

條件也在重定向上進行測試,因此您必須確保404重定向不會超出應有的數量。 這意味着%{REQUEST_URI}將包含hidden_folder一旦它被重定向,所以你必須添加一個RewriteCond來避免它。

這應該工作:

RewriteEngine On 

RewriteCond %{DOCUMENT_ROOT}/hidden_folder%{REQUEST_URI} !-f 
RewriteCond %{REQUEST_URI} !^/hidden_folder 
RewriteRule ^(.*)$ error/404.php [L] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ hidden_folder/$1 [L] 
+0

一點題外話,因爲你不是靠'ErrorDocument',你的'404.php'應該發送404 HTTP標頭。 – outlyer 2014-11-24 22:25:02

+0

您沒有提到任何關於此的要求,但值得注意的是,通過此解決方案,您仍然可以使用URL – outlyer 2014-11-25 03:11:05