.htaccess主域名重定向至子目录后无法访问文件问题
解决主域名指向子目录同时保留其他目录访问的问题
问题出在访问主域名example.com时,请求的是根目录public_html,这个目录实际存在,所以原规则里的RewriteCond %{REQUEST_FILENAME} !-d条件不满足,规则不会触发,而根目录没有默认索引文件(比如index.html/index.php),服务器就返回403 Forbidden。
修改你的.htaccess规则,单独处理根目录的请求,同时保留对现有文件/目录的访问:
RewriteEngine On # 单独处理主域名根路径的请求,直接指向subfolder的index.php RewriteRule ^$ /subfolder/index.php [L] # 处理非文件、非目录且未指向subfolder的请求,转发到subfolder RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_URI} !^/subfolder/ RewriteRule (.*) /subfolder/$1 [L]
规则说明:
- 第一条规则
RewriteRule ^$ /subfolder/index.php [L]专门匹配主域名的根请求(空路径),直接跳转到subfolder下的index.php,[L]表示这是最后一条规则,匹配后不再往下执行。 - 后面的规则保留原逻辑,但把
RewriteCond %{REQUEST_URI} !subfolder/改成!^/subfolder/,用^锚定开头,避免误匹配包含subfolder字符串的其他路径,更严谨。
这样修改后:
- 访问
example.com会直接加载subfolder/index.php - 访问
example.com/anotherfolder/image.png这类真实存在的文件/目录,规则不会触发,能正常访问 - 访问其他不存在的路径(比如
example.com/test),会转发到subfolder/test,由subfolder里的程序处理
内容的提问来源于stack exchange,提问作者Alfreda Foley
相关产品推荐
相关产品推荐

