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

我有重写规则工作正常,但最终如果在去index.php时省略了尾部斜线,则更改可见的URL:

 RewriteEngine on RewriteCond %{REQUEST_URI} !main RewriteRule /.* /~user/main$0 

当有人访问

 http://user.dev.example.com/utilities/pib/ 

该页面正常工作。 但是,如果他们访问

 http://user.dev.example.com/utilities/pib 

他们被redirect到

 http://user.dev.example.com/~user/main/utilities/pib/ 

这仍然可以正常工作,但我宁愿让url不要改变。 服务器有其他configuration,允许~user将您带到光盘上的public_html (这些文件所在的位置)。 所以实际的URL应该是:

 http://dev.example.com/~user/main/utilities/pib/ 

但它仍然留下了我的名字在领域。 我不确定我是否能够解决这个问题,但是我也不确定其他configuration可能导致这个问题。

你总是可以使用mod_rewrite附加一个尾部的斜杠

 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_URI} !(.*)/$ RewriteRule ^(.*)$ http://domain.com/$1/ [L,R=301] 

把它加到你的第一条规则上面

上述规则不是它的原因。 检查conf.d所有包含的configuration文件(或类似的)。 如果您设置AllowOverride All ,则使用以下命令查找所有.htaccess文件:

 find /path/to/document/root -name .htaccess 

并看看那个。

我也build议你打开mod_rewrite日志:

 RewriteLog /tmp/rewrite.log RewriteLogLevel 9 

看看如何parsingURI。