如果URL存在,则强制尾部斜杠

时间:2019-03-03 16:24:30

标签: apache .htaccess redirect mod-rewrite

我需要对htaccess中的特定重定向的一些帮助。这不是简单的“ 力尾斜杠”。

所以我的问题是将所有不带斜杠的URL重定向到一个斜杠。我使用以下mod_rewrite规则完成此操作:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteCond %{REQUEST_FILENAME} !\.(gif|jpg|png|jpeg|css|js|xml|php)$ [NC]
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1/ [R=301,L]

但是这样做有一个很大的问题:如果我为不存在的 URL 触发并且没有结尾斜杠,则Apache会触发404错误,但对于使用TRASHLING SLASH不存在的URL 。因此,首先重定向为 301 ,然后重定向为404。这似乎没有任何意义。

我该如何解决?

1 个答案:

答案 0 :(得分:0)

首先测试存在(使用[OR]),然后测试不存在:

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteCond %{REQUEST_FILENAME} !\.
RewriteRule !/$ %{REQUEST_URI}/ [NE,R=301,L]