如何用.htaccess动态将根URL映射到hosting目录下的百余个页面?
解决方案
直接用一条带条件判断的Rewrite规则就能批量实现需求,不用逐个编写规则:
RewriteEngine On # 当请求的是根目录下的PHP文件,且hosting目录中存在对应文件时,内部重写 RewriteCond %{DOCUMENT_ROOT}/hosting/%{REQUEST_URI} -f RewriteRule ^([^/]+)\.php$ /hosting/$1.php [L]
规则说明:
RewriteEngine On:开启URL重写功能,是所有重写规则的基础前提。RewriteCond %{DOCUMENT_ROOT}/hosting/%{REQUEST_URI} -f:先判断hosting目录下是否存在当前请求的PHP文件(-f用于检查目标路径是否为真实存在的文件),避免请求不存在的文件时也触发重写,导致不必要的错误。RewriteRule ^([^/]+)\.php$ /hosting/$1.php [L]:匹配根目录下所有以.php结尾的文件([^/]+确保只匹配根目录的文件,不会影响子目录请求),然后内部重写到hosting目录下对应的PHP文件;[L]表示这是最后一条规则,匹配成功后不再处理后续规则。
关于之前方案不适用的原因:
你尝试的方案是用于隐藏URL中的目录路径的反向需求,而你的需求是将根目录的PHP请求映射到子目录,方向完全相反,所以直接套用会出现错误。上面的规则刚好适配你的场景,既批量处理所有PHP文件,又做了存在性校验,避免无效重写。
内容的提问来源于stack exchange,提问作者Hifi
相关产品推荐
相关产品推荐

