.htaccess url的路径相同,但指向不同的目录
我正试图改变方向 www.example.com/about希望与文档/about.html匹配 www.example.com/register希望与mod/register.php匹配.htaccess url的路径相同,但指向不同的目录,.htaccess,mod-rewrite,url-rewriting,rewrite,.htaccess,Mod Rewrite,Url Rewriting,Rewrite,我正试图改变方向 www.example.com/about希望与文档/about.html匹配 www.example.com/register希望与mod/register.php匹配 RewriteCond %{REQUEST_URI} !\.+$ RewriteRule ^([^\.][a-z]+)$ docs/$1.html [L] RewriteRule ^([^\.][a-z]+)$ mod/$1.php [L] 第一条重写规则非常有效, 但是第二条重写规则不起作用,它一直显示4
RewriteCond %{REQUEST_URI} !\.+$
RewriteRule ^([^\.][a-z]+)$ docs/$1.html [L]
RewriteRule ^([^\.][a-z]+)$ mod/$1.php [L]
第一条重写规则非常有效,但是第二条重写规则不起作用,它一直显示404错误。只要两个位置(例如
/docs/foo.html
和/mod/foo.php
)没有相同的文件,就可以在重写之前先对目标进行检查:
# check for docs/.html first
RewriteCond %{REQUEST_URI} ^/([a-z]+)$
RewriteCond %{DOCUMENT_ROOT}/docs/%1.html -f
RewriteRule ^ /docs/%1.html [L]
# If not .html, then check for mod/.php
RewriteCond %{REQUEST_URI} ^/([a-z]+)$
RewriteCond %{DOCUMENT_ROOT}/mod/%1.php -f
RewriteRule ^ /mod/%1.php [L]
这是因为第一个规则regex也匹配
www.example.com/register
。两个传入URL的模式相同,因此您必须找出如何识别它们,因为替换URL是不同的。非常感谢mate给出的非常好的答案!!我学到了新的东西:D