【问题标题】:Apache mod_rewrite infinite loop, cannot fix itApache mod_rewrite 无限循环,无法修复
【发布时间】:2014-10-25 22:31:39
【问题描述】:

我的 htaccess:

RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ([^/.]+)/([^/.]+)(.*) /Application/?path=$1/$2$3 [L,QSA]
RewriteRule ^$ /Application/?path=ACFrontPage/getMainPage [L,QSA]
RewriteRule (.*) /Application/index.php?path=$1 [L,QSA]

此行导致无限重定向:

RewriteRule (.*) /Application/index.php?path=$1 [L,QSA]

但如果以前的规则不匹配,我需要将所有内容重定向到 index.php 文件。 我该怎么做?

从日志中它这样做:

split uri=/Application/?path=Application/ -> uri=/Application/, args=path=Application/&path=Application/&path=Application/&path=Application/&path=Application/&path=Application/&path=Application/&path=Application/&path=Application/&path=Application/

==========================

@anubhava

我尝试了您建议的答案,它适用于除基本域之外的所有内容,即: http://example.com/

【问题讨论】:

  • RewriteCond %{REQUEST_URI} !^/Application/index\.php 以上RewriteRule (.*) /Application/index.php?path=$1 [L,QSA]RewriteRule ((?!^/Application/index\.php).*) /Application/index.php?path=$1 [L,QSA] - 没有检查它
  • 谢谢,第一个我试过了,它不适合我,第二个我稍后再试。
  • 抱歉,第一个确实有效。谢谢)

标签: apache .htaccess mod-rewrite


【解决方案1】:

RewriteCond 仅适用于下一个RewriteRule。调整规则以避免重写所有现有文件或目录:

RewriteEngine On

RewriteRule ^$ /Application/?path=ACFrontPage/getMainPage [L]

# skip rewrite for all files/directories
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]

RewriteRule ^([^/.]+)/([^/.]+)(.*)$ /Application/?path=$1/$2$3 [L,QSA]

RewriteRule ^(.+)$ /Application/index.php?path=$1 [L,QSA]

【讨论】:

  • 按照建议尝试没有帮助。
  • 那些类型的 cmets 没有多大帮助。提供详细信息,因为这个 .htaccess 的位置是什么?你在浏览器中输入了什么网址?您遇到了什么错误,还有更多规则吗?
  • 对不起,我只是使用了 cmets 中建议的解决方案来解决我的问题。至于你要求的信息,我会用它来编辑我的问题。
  • 经过更仔细的测试,它适用于除基本域之外的所有内容。
  • 你必须按照我的解释安排你的答案,然后我才能接受。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-07
  • 1970-01-01
  • 1970-01-01
  • 2013-09-24
  • 2019-07-21
  • 1970-01-01
相关资源
最近更新 更多