.htaccess在最后重写强制尾随斜线

Dre*_*rew 32 url .htaccess mod-rewrite

我的htaccess文件中有以下代码:

# Force Trailing Slash
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^[^/]+$ %{REQUEST_URI}/ [L,R=301]
Run Code Online (Sandbox Code Playgroud)

当我去www.mydomain.com/test它将它重定向到/ test/时,这似乎工作正常.问题是,当我访问www.mydomain.com/test/another时,它不会将斜杠放在另一个上.

有没有人知道如何修改我的代码以使尾随斜杠工作无论URL多长?

谢谢!

jef*_*nes 67

基于上面的答案,答案稍微强一些:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)([^/])$        /$1$2/ [L,R=301]
Run Code Online (Sandbox Code Playgroud)

RewriteCond会检查,以确保有一个与该名称的文件,如果没有,则执行重写规则.比拥有手动扩展列表更具前瞻性!


und*_*one 30

RewriteRule ^(.*)([^/])$ http://%{HTTP_HOST}/$1$2/ [L,R=301]
Run Code Online (Sandbox Code Playgroud)

编辑:如果你想要排除一些像php文件的请求:

RewriteCond %{REQUEST_URI}  !\.(php|html?|jpg|gif)$
RewriteRule ^(.*)([^/])$ http://%{HTTP_HOST}/$1$2/ [L,R=301]
Run Code Online (Sandbox Code Playgroud)

  • regexp中的@DanFromGermany问号表示前面的字符(在这种情况下为**l**),可能存在也可能不存在于字符串中.所以在可以涵盖**htm**和**html**扩展! (8认同)

Hen*_*nen 5

Death的解决方案有效时,如果您忘记将某些文件类型添加到列表中,则会很烦人.您可以执行此操作以强制所有不直接指向!-f在条件中使用的文件的URL的尾部斜杠.

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*[^/])$ http://%{HTTP_HOST}/$1/ [L,R=301]
Run Code Online (Sandbox Code Playgroud)