我有可以正常工作的重写规则,但如果在转到时省略尾随斜杠,则最终会更改可见的 URL index.php
:
RewriteEngine on
RewriteCond %{REQUEST_URI} !main
RewriteRule /.* /~user/main$0
当有人来访时
http://user.dev.example.com/utilities/pib/
页面运行正常。但是,如果他们访问
http://user.dev.example.com/utilities/pib
他们被重定向到
http://user.dev.example.com/~user/main/utilities/pib/
这仍然可以正常工作,但我宁愿 URL 保持不变。服务器有其他配置,允许~user
URL 将您带到public_html
光盘上(这些文件所在的位置)。因此实际 URL 应该是:
http://dev.example.com/~user/main/utilities/pib/
但是它仍然在域中保留了我的名字。我不确定我是否能够解决这个问题,但我也不确定其他配置可能导致这个问题。
答案1
您始终可以使用 mod_rewrite 来附加尾部斜杠
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ http://domain.com/$1/ [L,R=301]
将其添加到第一条规则之上
答案2
上述规则不是导致此问题的原因。请检查conf.d
(或类似文件) 中包含的所有配置文件。如果您设置了AllowOverride All
,请使用以下命令查找所有.htaccess
文件:
find /path/to/document/root -name .htaccess
并看看它。
我还建议您打开日志mod_rewrite
:
RewriteLog /tmp/rewrite.log
RewriteLogLevel 9
查看 URI 是如何解析的。