htaccess 不工作,但检查成功 localhost

htaccess not working but check successful localhost

我有一个简单的 .htaccess 文件

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

我测试了 htaccess.madewithlove.com 中的文件,它给出了正确的结果并且复制和粘贴结果完美无缺。 (http:///localhost/v4r.info/NGOplus/index.php?NGO=action-for-woman&page=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?NGO=action-for-woman&page=board.list.php&ff=710;;;;;&startdate=2017-11- 11

已添加:

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

有效的是 v4r 中的 htaccess。info/NGOplus 带有指向 NGOplus 的符号链接 'action-for-woman' RewriteRule ^(.+?)/?$ index.php?page=$1 [L,QSA]

在这里,apache 进行了“本地”重写,即 URL 的最后一部分(目录名称 'action-for-woman' 我必须从 $_SERVER 中提取...)

my .htaccess file is in v4r.info directory what is not the root directory.

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

But anyhow, rewriting is not recursive afaik.

是的,它在 目录 上下文中是“递归的”(即 .htaccess)。因为重写引擎反复“循环”,直到 URL 不变地通过,或者您已明确设置 END (Apache 2.4).

请尝试以下操作:

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

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

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