使用mod_rewrite,我有一系列服务器端重定向(意味着客户端没有意识到URI更改。)我想这样做,以便任何客户端对index.php的引用返回404错误不会中断服务器端请求...
-
实施例..
客户端请求x.html,它加载index.php的内容..
客户端请求index.php,客户端获取404 Not Found错误..
-
我知道这个形成得很差,可能会解释得更好但是我希望这个解释得很好 - 如果不是,我道歉......
-
我在google上花了最后三个小时,试图找到解决方案,并且因为我真的不知道它会被理解为什么而变得简短......
答案 0 :(得分:2)
答案取决于您的具体情况:如果您在.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]
您可以使用RewriteLog和RewriteLogLevel来获取重写执行的详细信息。
答案 1 :(得分:0)
也许[END]标签就是您要搜索的内容。正如David所说,问题是请求是第二次处理。据我所知,你可以使用[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或更高版本。