.htaccess:重定向尾部斜杠

.htaccess: Redirect Trailing Slashes

我在根目录下的 .htaccess 文件中有一个重写规则:

RewriteEngine On

# Exclude .css / .js / ...
RewriteCond ${REQUEST_URI} ^.+$
RewriteCond %{REQUEST_FILENAME} \.(gif|jpe?g|png|js|css|swf|php|ico|txt|pdf|xml)$ [OR]
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -l
RewriteRule ^ - [L]

# Rewrite Rule
RewriteRule ^([^/]*)/([^/]*)$ /index.php?category=&product=

所以 URL http://example.com/data1/data2 给我 category=data1product=data2.

问题是以下 URL 无法正常工作:

http://example.com/data1          # Not Working (Page Not Found)
http://example.com/data1/data2/   # Not Working (Page Not Found)

但是这些 URL 正在工作:

http://example.com/data1/         # Works -> category=data1
http://example.com/data1/data2    # Works -> category=data1 & product=data2

如何重定向前两个URL到第二个?

OR/AND

做一些事情,所有 URLs 都重定向到非尾部斜线。所以下面的 URLs:

http://example.com/data1/
http://example.com/data1/data2/

重定向到这些:

http://example.com/data1
http://example.com/data1/data2

为避免尾随斜杠,请进行重定向

RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)/$ / [R,L]

要将 URL 与一个元素匹配,您可以使用第二条规则

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)$ /index.php?category=&product= [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)$ /index.php?category= [L]

全部加在一起得到

RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)/$ / [R,L]

RewriteRule ^(.+?)/(.+)$ /index.php?category=&product= [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)$ /index.php?category= [L]