求助:在.htaccess中无法实现public_html文件夹外的重定向
解决.htaccess无法重定向到public_html外目录的问题
你遇到的核心问题是:Apache默认限制从public_html(网站根目录)访问上级目录的文件,而且RewriteRule里用../的相对路径写法完全不生效——因为RewriteRule的目标路径是相对于DocumentRoot(也就是public_html)解析的,不是相对于.htaccess所在目录的上级。
先拆解你两段代码的问题:
- 第一段代码里的
framework/public/index.php是相对于public_html的路径,如果你上级目录的framework根本不在public_html里,自然找不到文件。 - 第二段代码里的
../framework/...写法无效,Apache不会把这种相对路径解析到DocumentRoot之外。
正确的解决方法
用Apache的环境变量%{DOCUMENT_ROOT}拼接绝对文件系统路径,就能准确定位到public_html外的文件:
RewriteEngine On # 匹配/api和/api/xxx的所有请求,重写到上级目录的framework/public/index.php RewriteRule ^api(/.*)?$ %{DOCUMENT_ROOT}/../framework/public/index.php [L]
额外注意事项
- 权限检查:确保Apache的运行用户(比如
www-data或apache)有读取../framework/public目录和index.php文件的权限,否则会出现403错误。 - 配置生效前提:如果你的Apache配置里有
AllowOverride None,需要改成AllowOverride All或者至少AllowOverride FileInfo,这样.htaccess里的Rewrite规则才能生效。
内容的提问来源于stack exchange,提问作者Mostafa Azimi
相关产品推荐
相关产品推荐

