如果省略最后一个斜杠,则重写更改的 URL

如果省略最后一个斜杠,则重写更改的 URL

我有可以正常工作的重写规则,但如果在转到时省略尾随斜杠,则最终会更改可见的 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 保持不变。服务器有其他配置,允许~userURL 将您带到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 是如何解析的。

相关内容