【发布时间】:2012-11-18 09:50:16
【问题描述】:
我了解如何在实际目录中添加目录斜杠,但我需要在虚拟目录中添加尾部斜杠 - 这样,当用户访问 example.com/website/blog/entries 时( 其中 /blog 和 /entries 都是虚拟目录),URL 地址将物理更改为:example.com/website/blog/entries/
这是我当前工作的 htaccess 代码,用于将假/虚拟目录转换为我的 php 脚本的参数:
RewriteRule ^/?([a-zA-Z_\-/.]+)$ index.php?file=$1 [L,QSA]
这个 RewriteRule 使 example.com/website/blog/entries/ 看起来像 example.com/website/index.php?file=blog/entries / 仅适用于 PHP,而不适用于用户。
以下是一些我尝试过但无济于事的重写规则:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .*[^/]$ %{REQUEST_URI}$1/ [L,R=301]
# -----------------------------------------------
RewriteCond %{REQUEST_URI} ^(.+)/$
RewriteRule ^.+/$ %1 [R=301,L]
我认为问题是因为我当前将虚拟目录转换为参数的正则表达式会查找以“/”开头的目录名称,因此当站点安装时不在根文件夹(“/”)中,或者如果存在不是尾部斜杠,它重定向到完全错误的东西。我无法在我的 htaccess 文件中的任何位置写入文件夹路径,因为路径会不断变化。例如,我不能使用类似的东西:
RewriteRule ^(.*)$ http://localhost:8888/project/$1/ [L,R=301]
有没有办法在将虚拟目录转换为 PHP 参数之前,在在真实目录和虚拟目录上强制使用斜杠?
【问题讨论】:
标签: php apache .htaccess mod-rewrite rewrite