Mod重写删除尾部斜杠但保留目录

时间:2013-03-10 20:37:00

标签: .htaccess mod-rewrite url-rewriting

到目前为止我的.htaccess是这样的:

  RewriteEngine On
  RewriteBase /
  RewriteCond %{HTTP_HOST} !^www\..+$ [NC] 
  RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L] 
  <FilesMatch "\.(htm|php|js|css|htc|png|gif|jpe?g|ico|xml|csv|txt|swf|flv|eot|woff|svg|ttf|pdf|gz)$">
    RewriteEngine Off
  </FilesMatch>
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule .* index.php [L]
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteRule .*\.html$ index.php [L]

我想将带有斜线的网址重定向到没有的网址。但是应该保留目录的斜杠。

非常感谢任何帮助!

更新: 经过一些谷歌研究,我为我组装了一些有效的解决方案。用于删除尾部斜杠和重定向www的重写都正常工作。

  RewriteRule ^(.+)/$ http://%{HTTP_HOST}/$1 [L,R=301]
  RewriteCond %{HTTP_HOST} ^rudolfapotheke.de$ [NC]
  RewriteRule ^(.*) http://www.%{HTTP_HOST}/$1 [L,R=301]

2 个答案:

答案 0 :(得分:1)

首先,我会将您的FilesMatch更改为RewriteCond

RewriteCond %{REQUEST_FILENAME} !\.(?:htm|php|js|css|htc|png|gif|jpe?g|ico|xml|csv|txt|swf|flv|eot|woff|svg|ttf|pdf|gz)$
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php [L]

并简化下一个RewriteRule

的模式
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule \.html$ index.php [L]

或将两个规则放在一起并仅测试

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php [L]

最后删除尾部斜杠的规则

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

答案 1 :(得分:0)

要重定向带有斜杠的那些,您需要检查该路径是否为RewriteCond的目录,如果文件名匹配RewriteRule

,则需要包含/$

所以它看起来像这样:

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