【发布时间】:2012-12-12 15:41:24
【问题描述】:
目标:
在共享 Apache 2.2 机器上的虚拟服务器中,我尝试将 .htaccess 配置为无缝表示 public_html 文件夹的子文件夹中的文件,就像它们位于根目录中一样。
也就是说,当用户访问http://www.example.com/home时,我需要他或她无缝地(无需在客户端浏览器中重写URL)查看来自http://www.example.com/subfolder/home的文件。
我的.htaccess 文件如下所示:
RewriteEngine on
RewriteRule !^subfolder/ subfolder%{REQUEST_URI}
问题:
这可行,但是它会在客户端浏览器中重写 URL。
也就是说,用户在他们的地址栏中看到http://www.example.com/subfolder/home/,但我需要他们看到http://www.example.com/home
我的理解是,我在 .htaccess 中所做的应该会导致最终用户不可见的“内部”重写,但似乎我正在接受“外部”重写。
我做错了什么?
[编辑] 其他详细信息:
当用户访问www.example.com 时,它确实按预期工作,因为用户看到从public_html/subfolder/default.html 提供的主页内容,并且浏览器地址栏显示www.example.com。
但是,当用户单击该主页上的“联系”链接(编码为 href="/contact")时,它会到达那里,但会在浏览器地址栏中显示 www.example.com/subfolder/contact/,就好像它执行了重定向而不是内部重写。
如果我随后删除地址栏中的 /subfolder 文本并强制重新加载页面,它会起作用 - 它加载正确的内容,地址栏仍然是 www.example.com/contact/
实现说明:如果有帮助,public_html/subfolder/contact 是一个包含default.html 文件的文件夹。
另一个观察结果:
如果我打开一个新标签并输入www.example.com/contact/(注意尾部斜杠),它会按预期工作。
但是如果我打开一个新标签并输入www.example.com/contact (没有尾部斜杠),它会重定向到www.example.com/subfolder/contact/,这是我不想要的。
我觉得这应该告诉我出了什么问题,但我仍然无法找到答案。
【问题讨论】:
-
你还有什么规定吗?您确定重定向时没有尾部斜杠吗?
-
public_html 目录中是否有您也需要访问的文件,或者子文件夹中的所有文件?
-
@JonLin,我没有其他规则,是的,我错过了一个斜杠,所以我编辑了这个问题。
-
@JennyD,public_html 中没有我还需要访问的任何文件。
public_html目录包含 .htaccess 文件和多个文件夹,其中一个包含我的主example.com站点,其他包含子域站点。
标签: apache .htaccess apache2 rewrite