htaccess 重定向嵌套导致麻烦 - 需要尾部斜线

htaccess redirect nestings causes trouble - trailing slash needed

我的 htacces 中有一些规则,一切都是在 Whosebug 和其他网站的帮助下边做边学。但是现在我想添加一条规则,用于在没有后缀的 urls 中添加尾部斜杠(以假装重复内容),问题开始了 - 并且出现了一个永无止境的循环。

这些是我在 htacces 中得到的规则:

RewriteEngine on
RewriteBase /

# redirect urls without www. to url with www.
RewriteCond %{HTTP_HOST} ^domain\.de$
RewriteRule ^(.*)$ http://www.domain.de/ [L,R=301]

# hide the suffix of urls
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /(.+)\.html\ HTTP/
RewriteRule (.*).html$ / [R=301,L]

# start redirect everything to the subfolder
RewriteCond %{HTTP_HOST} ^(www\.)?domain\.de [NC]
# except these folders: 
RewriteCond %{REQUEST_URI} !^/downloads [NC]
RewriteCond %{REQUEST_URI} !^/cms [NC]
RewriteCond %{REQUEST_URI} !^/vorschau [NC]

RewriteCond %{REQUEST_URI} !^/domain/.*$
RewriteRule ^(.*)$ /subfolder/
# end redirect everything to the subfolder

现在我想添加这个用于添加尾部斜线的新规则,但是这些嵌套规则不能一起工作!

所以 www.domain.de/test 应该自动得到一个尾部斜线。或者反过来:每个 url 带尾部斜杠的都应该重定向到没有 的那个(我不知道哪种方式更好!)。

    # Add a trailing slash to URLs that have none
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_URI} !(.*)/$
    RewriteRule ^(.*)$ http://www.domain.de// [L,R=301] 

谁能帮帮我? :) 谢谢!

我发现了另一种方法来执行此 Whosebug 发布中的无尾部斜线政策:Htaccess: add/remove trailing slash from URL

这段代码对我有用:

# To enforce a no-trailing-slash policy with subfolder
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} (.+)/$
RewriteRule ^ %1 [R=301,L]