目标:
在共享 Apache 2.2 机器上的虚拟服务器中,我尝试配置.htaccess为无缝表示文件夹子文件夹中的public_html文件,就好像它们在根目录中一样。
也就是说,http://www.example.com/home当用户访问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/,这是我不想要的。
我觉得这应该告诉我出了什么问题,但答案仍然不知道。