Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.htaccess url的路径相同,但指向不同的目录_.htaccess_Mod Rewrite_Url Rewriting_Rewrite - Fatal编程技术网

.htaccess url的路径相同,但指向不同的目录

.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

我正试图改变方向

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]
第一条重写规则非常有效,

但是第二条重写规则不起作用,它一直显示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