如何通过.htaccess将所有URL内部Rewrite至/test/子目录?
URL内部重写问题解决方案
当前使用的.htaccess规则
RewriteEngine On RewriteBase / RewriteRule ^(index\.php)?$ /test/ [L]
这条规则仅匹配根目录或根目录下的index.php,所以只能处理localhost/的请求。
运行环境
MacBook Pro - XAMPP 8.1.2(安装版,非虚拟机)
需求与现状
- 目标:实现URL内部重写(不修改地址栏),将所有请求指向
/test/目录。 - 已实现:输入
localhost/时,可正常显示localhost/test/的内容。 - 未解决:
localhost/test2/这类子目录请求无法被重写为localhost/test/test2/。
解决方案
替换成以下.htaccess规则即可实现需求:
RewriteEngine On RewriteBase / # 排除真实存在的文件和目录,避免影响现有资源访问 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d # 把所有请求重写到/test/目录,保留原请求路径 RewriteRule ^(.*)$ /test/$1 [L]
规则说明
RewriteCond %{REQUEST_FILENAME} !-f:仅当请求的不是真实存在的文件时,才执行后续重写RewriteCond %{REQUEST_FILENAME} !-d:仅当请求的不是真实存在的目录时,才执行后续重写RewriteRule ^(.*)$ /test/$1 [L]:捕获请求的完整路径,将其拼接在/test/后完成内部重写,[L]表示终止后续规则处理
修改后效果:
localhost/→ 内部重写为localhost/test/localhost/test2/→ 内部重写为localhost/test/test2/localhost/abc.html→ 内部重写为localhost/test/abc.html
内容的提问来源于stack exchange,提问作者Tom
相关产品推荐
相关产品推荐

