服务器是Apache 2.4.18,PHP ver 7.0 ...
说明: 在php端,我在创建html链接时使用rawurlencode($ name)。
REQUEST_URI看起来像这样:
function addImagesToArray(){
alert("clicked!");
}
差异只在一个空间 this / that 与 this / that
/lang/cat1/cat2/product with bla (this/that) -- works
/lang/cat1/cat2/product with bla (this/ that) -- infinite internal redirect
我想要的只是标准的前端控制器,所有请求都应该转到file.php。这种情况在99.99%的情况下有效。但是带有VirtualHost:
# I have tried different combinations of
AllowEncodedSlashes On
AllowEncodedSlashes NoDecode.
htaccess:
<IfModule mod_rewrite.c>
Options +FollowSymLinks -MultiViews #different combinations
RewriteEngine On
# tried different combinations
#RewriteCond %{REQUEST_URI} !^/?file\.php$
#RewriteCond %{ENV:REDIRECT_STATUS} ^$
#RewriteCond %{ENV:REDIRECT_STATUS} !200
RewriteRule .? file.php [L] # END
</IfModule>
的ruri会进行无限递归。
问题: 为什么会这样? 怎么解决?
答案 0 :(得分:0)
您需要取消注释上次重写条件。
尝试:
<IfModule mod_rewrite.c>
Options +FollowSymLinks -MultiViews #different combinations
RewriteEngine On
# tried different combinations
#RewriteCond %{REQUEST_URI} !^/?file\.php$
#RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{ENV:REDIRECT_STATUS} !200
# END
</IfModule>
否则您的规则会将 /file.php 重定向到自身。
在apache 2.4上,您只需使用END标志来终止重写处理:
RewriteEngine on
RewriteRule .? file.php [END]
答案 1 :(得分:0)
我在另一个论坛找到了解决方案 解决方案很简单。但可能对某人有帮助。
一个人伤心:Be brave, understand that there is nothing wrong with your htaccess! But you still have recursions. So bug is somewhere in php code.
这破坏了我的htaccess固定,让我可以深入了解商业和fw代码。几小时后发现了Bug。 url函数之一具有早熟的rawurldecode()。对于懒惰程序来说很酷,如果你有带编码/名字的产品,那就太酷了。
但问题的回答“这是否有效?”也有误导性。 “是的,当然。这一定是因为重新迁移。” Riiight;)