所以我的目录结构是这样的:
vhostrootdir/
|- app/
|- public/
|- css/
|- img/
|- js/
这是我的重写:
ServerName vhostname
<Directory "vhost/root/dir">
Options FollowSymLinks
AllowOverride None
Require local
RewriteEngine On
RewriteCond %{CONTEXT_DOCUMENT_ROOT}/public/$1 -f
RewriteRule ^((?s).*)$ public/$1 [END]
RewriteRule ^((?s).*)$ index.php?_url=$1 [END]
</Directory>
如果我转到,vhostname/whatever
那么我的php$_GET["_url"]
返回whatever
,并且地址栏停留vhostname/whatever
在所需的位置。
但是,如果我去vhostname/public
,然后$_GET["_url"]
是public/
。注意多余的“ /”,尽管这并不打扰我。问题是浏览器地址栏也更改了 ,我绝对不希望更改为该地址栏vhostname/public/?_url=/public
。
vhostname/public/
更令人困惑的是,如果我去(请注意附加的“ /”),则它可以正常工作。我得到的$_GET["_url"]
是public/
,地址栏没有变化。
如果我去的话,情况也是一样的vhostname/app
。
编辑: 原来是浏览器历史记录问题。我清除了Chrome的历史记录,并对其进行了修复。 没关系,没有解决它。将DocumentRoot更改为公用文件夹后,它仍在公用和应用程序url上发生,但是清除历史记录后,它不再在公用和应用程序url上发生,并且现在在公用文件夹子文件夹上发生。
好吧,我相信我已经解决了这个问题。由于重写之前的URL已解析到目录,并且由于我省略了结尾/
,所以apache会自动发送/
添加了结尾的301 Moved Permanently重定向。我猜由于命令apache的作用,重定向也进行了重写,而不是从301重定向到http://<vhostname>/img
,<vhostname>/img/
而是301重定向到<vhostname>/img/?_url=img
。
我终于通过添加DirectorySlash off
到我的虚拟主机中解决了这个问题(我认为)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句