.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=data1
和 product=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]
我在根目录下的 .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=data1
和 product=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]