2015-04-05 44 views
1

使用mod_rewrite,我有一系列的服务器端重定向(意味着客户端没有意识到URI的变化。)我想让它,以便任何客户端引用index.php返回404错误,而不会中断服务器片面的请求......高级htaccess重定向

-

例..

客户端请求x.html,它加载的index.php文件内容..

客户端请求index.php,客户端获取404 Not Found错误..

-

我明白,这是不好形成也许可以更好地解释了很多,但我希望是这样解释不够好 - 如果不是的话,我很抱歉......

-

我已经花了上谷歌在过去三个小时,试图找到解决这一点,纷纷拿出短,因为我真的不知道它会被理解为...

回答

2

答案WER取决于你的背景下:如果你是不是在.htaccess或在<Directory>,这很容易:

RewriteEngine On 
RewriteRule /index.php  -   [L,R=404] 
RewriteRule /x.html  /index.php [L] 

如果你.htaccess或在<Directory>,处理请求第二时间,请参阅here。 我用了一个环境变量来解决是:

RewriteEngine On 
# after an internal redirect, the variable is prefixed with REDIRECT_ 
RewriteCond %{ENV:REDIRECT_redirect_to_php} !=true 
# no leading/this time 
RewriteRule index.php  -   [L,R=404] 
RewriteRule x.html  /index.php [L,E=redirect_to_php:true] 

您可以使用RewriteLogRewriteLogLevel得到改写执行的细节。

+0

非常感谢! 编辑: 我在网站的根目录,并没有使用任何目录标签或任何这样的,但第一个选项仍然返回404试图加载index.php – Wayne 2015-04-05 09:52:07

0

也许[END]标记就是您要搜索的内容。正如David所说,问题在于请求被第二次处理。就我unterstand而言,您可以使用[END]来防止此行为。见https://stackoverflow.com/a/286005/4751174(在答案的末尾)或mod_rewrite的DOC:

使用[END]标志不仅终止当前轮改写处理的(如[L]),而且还可以防止任何随后的改写处理从发生在每个目录(htaccess)上下文中。 http://httpd.apache.org/docs/2.4/rewrite/flags.html#flag_end

需要Apache 2.3.9或更高版本。

+0

我已经验证并接受了以前的答案。它以我想要的方式充分发挥作用。 – Wayne 2015-04-06 12:22:27