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 已激活。 (垃圾线给出“内部服务器错误”)
在另一个目录中 htaccess 工作正常。
apache.conf 似乎没问题(AllowOverride All)
已添加:
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
(就像您在测试中所做的那样)。但是,可以通过使正则表达式更具体来避免这种情况。
我有一个简单的 .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 已激活。 (垃圾线给出“内部服务器错误”)
在另一个目录中 htaccess 工作正常。
apache.conf 似乎没问题(AllowOverride All)
已添加:
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
(就像您在测试中所做的那样)。但是,可以通过使正则表达式更具体来避免这种情况。