删除多个斜杠但保留尾部斜杠

时间:2014-12-09 23:22:39

标签: .htaccess mod-rewrite

我的.htaccess中有一条规则可以删除多个尾部斜杠。它有效:

RewriteCond %{THE_REQUEST} ^([A-Z]{3,9})\ (.*)//([^\ ]*)
RewriteRule ^ %2/%3 [R=301,L]

我还有一条规则,如果它缺失,会添加一个尾部斜杠。它本身也有效:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !/$
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1/ [R=301,L]

我在这里尝试实现的目标非常明显 - 删除多个斜杠,留下一个斜杠。但是应用了第一条规则,即使我指定了索引页,我也没有得到任何尾部斜杠。 请帮助我将这些规则合并为一个或至少使它们正常工作。我尝试使用this tool进行调试,但无法处理%{THE_REQUEST}。

我会留下.htaccess文件的剩余部分作为参考,也许它会干扰。它不是我写的,但我必须弄清楚。

RewriteCond %{REQUEST_URI} !^styles
RewriteCond %{REQUEST_URI} !^css
RewriteCond %{REQUEST_URI} !\.css
RewriteCond %{REQUEST_URI} !^js
RewriteCond %{REQUEST_URI} !\.js
RewriteCond %{REQUEST_URI} !^images
RewriteCond %{REQUEST_URI} !^uss-js
RewriteCond %{REQUEST_URI} !^uss-css
RewriteCond %{REQUEST_URI} !^uss-img
RewriteCond %{REQUEST_URI} !^uploadedFiles
RewriteCond %{REQUEST_URI} !(\.ico|\.ICO)$
RewriteCond %{REQUEST_URI} !(\.jpg|\.JPG)$
RewriteCond %{REQUEST_URI} !(\.jpeg|\.JPEG)$
RewriteCond %{REQUEST_URI} !(\.png|\.PNG)$
RewriteCond %{REQUEST_URI} !(\.gif|\.GIF)$
RewriteCond %{REQUEST_URI} !(\.css|\.CSS)$
RewriteCond %{REQUEST_URI} !(\.js|\.JS)$
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)$ index.php?reference=$1 [L]


RewriteCond %{REQUEST_URI} (\.ico|\.ICO)$
RewriteCond %{REQUEST_URI} (\.jpg|\.JPG)$
RewriteCond %{REQUEST_URI} (\.jpeg|\.JPEG)$
RewriteCond %{REQUEST_URI} (\.png|\.PNG)$
RewriteCond %{REQUEST_URI} (\.gif|\.GIF)$
RewriteCond %{REQUEST_URI} (\.css|\.CSS)$
RewriteCond %{REQUEST_URI} (\.js|\.JS)$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ [R=404]

1 个答案:

答案 0 :(得分:1)

  

我在索引页面上没有收到斜杠

是的,你不会因为你的尾随斜杠添加规则具有以下条件:

RewriteCond %{REQUEST_FILENAME} !-f

这意味着如果请求是针对有效文件,则不执行。

您还可以在第一条规则中添加尾部斜杠:

# remove multiple slashes from URL and add a trailing one
RewriteCond %{THE_REQUEST} //
RewriteRule ^(.+?)/?$ /$1/ [R=302,L,NE]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule [^/]$ %{REQUEST_URI}/ [R=302,L,NE]