目标:
在共享 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/
,这是我不想要的。
我觉得这应该告诉我出了什么问题,但答案仍然不知道。