htaccess不工作,但检查成功



我有一个简单的。htaccessfile

DirectoryIndex index.php
RewriteEngine On
RewriteRule ^v4r.info/(.*)/(.*) v4r.info/NGOplus/index.php?NGO=$1&page=$2 [L,QSA]

我在htaccess.madewithlove.com中测试了这个文件,它给出了一个正确的结果,并且复制粘贴结果完美无缺。(http://localhost/v4r.info/NGOplus/index.php?NGO=action-for-woman&页面= board.list.php& ff = 710;;;;;, startdate可以= 2017-11-11)

但是在本地主机上htaccess失败,报错:

File does not exist:
/var/www/html/public_html/v4r.info/action-for-woman/board.list.php
测试URL为

localhost/v4r.info NGOplus/index . php ?非政府组织= action-for-woman&页面= board.list.php& ff = 710;;;;;, startdate可以= 2017-11-11

  • htaccess已激活。(垃圾线给出"内部服务器错误")

  • 在另一个目录htaccess工作正常

  • apache.conf seems ok (AllowOverride All)

补充道:

htaccess文件不在基本目录中,而是在目录1。子目录(v4r.info)。

是什么工作是htaccess在v4r.info/NGOplus与符号链接"为妇女行动"到ngo +RewriteRule ^ (. + ?)/?$ index . php ?页面= 1美元(L, QSA)

在这里,apache做了一个"本地"重写,即只是URL的最后一部分(目录名'action-for-woman'我必须从$_SERVER中提取…)

我的。htaccess文件在v4r.info目录下,不是根目录。

在这种情况下,您的规则将永远不会匹配。RewriteRule模式匹配相对于包含.htaccess文件的目录的url路径。

但是无论如何,重写不是递归的。

是的,它是"递归的"。在目录上下文中(即。.htaccess)。重写引擎"循环"重复,直到URL不变地通过,或者您已经显式地设置了END(Apache 2.4)。

试试下面的命令:

RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{REQUEST_URI} !index.php$
RewriteRule ^([^/]+)/([^/]+)$ /v4r.info/NGOplus/index.php?NGO=$1&page=$2 [L,QSA]

REDIRECT_STATUS环境变量的检查是为了确保只重写直接请求,而不是已经重写的请求。

然而,这种模式仍然过于通用,因为它匹配任意两个路径段。我设置了第二个检查index.php的条件,这样您就可以直接请求/v4r.info/NGOplus/index.php(就像您在测试中所做的那样)。然而,这可以通过使正则表达式更具体来避免。

相关内容

  • 没有找到相关文章

最新更新