2014-11-24 75 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