.htaccess删除url中的尾部斜杠,除了文件夹

时间:2013-04-26 10:17:26

标签: apache .htaccess mod-rewrite

我有一个基本的网址重写效果很好,除非导航到文件夹

当用户导航到任何文件夹mydomain.com/folder/时,他会被重定向到mydomain.com/folder?pl1=css,从而导致无限重定向循环。

我尝试在规则上方添加RewriteCond %{REQUEST_FILENAME}/ -d,将页面重定向到其版本而不使用尾部斜杠。这解决了无限循环问题,但打破了重定向到页面而没有拖尾斜杠(我想为SEO原因保留这些问题:http://googlewebmastercentral.blogspot.be/2010/04/to-slash-or-not-to-slash.html

我的问题:

  • 如何处理文件夹correclty =>导航到mydomain.com/foldermydomain.com/folder/时不显示文件夹中的默认页面(/folder/index.html;如果存在)(不将变量附加到网址)
  • 对于额外的布朗尼点:如何优化重写的第二部分,以免使用6行代码:-)

这是我的代码:

# Start the rewrite engine
<IfModule mod_rewrite.c>
  Options +FollowSymlinks
  Options -MultiViews
  RewriteEngine On
</IfModule>

# Remove trailing slash
RewriteRule ^(.*)/$ /$1 [L,R=301]
# Rule below fixes loop, but breaks redirection
# RewriteCond %{REQUEST_FILENAME}/ -d

# Handle my GET variables
RewriteRule ^([A-Za-z0-9-_]+)/?$                                                                                            index.php?pl1=$1                                        [L] 
RewriteRule ^([A-Za-z0-9-_]+)/([A-Za-z0-9-_]+)/?$                                                                           index.php?pl1=$1&pl2=$2                                 [L] 
RewriteRule ^([A-Za-z0-9-_]+)/([A-Za-z0-9-_]+)/([A-Za-z0-9-_]+)/?$                                                          index.php?pl1=$1&pl2=$2&pl3=$3                          [L] 
RewriteRule ^([A-Za-z0-9-_]+)/([A-Za-z0-9-_]+)/([A-Za-z0-9-_]+)/([A-Za-z0-9-_]+)/?$                                         index.php?pl1=$1&pl2=$2&pl3=$3&pl4=$4                   [L] 
RewriteRule ^([A-Za-z0-9-_]+)/([A-Za-z0-9-_]+)/([A-Za-z0-9-_]+)/([A-Za-z0-9-_]+)/([A-Za-z0-9-_]+)/?$                        index.php?pl1=$1&pl2=$2&pl3=$3&pl4=$4&pl5=$5            [L] 
RewriteRule ^([A-Za-z0-9-_]+)/([A-Za-z0-9-_]+)/([A-Za-z0-9-_]+)/([A-Za-z0-9-_]+)/([A-Za-z0-9-_]+)/([A-Za-z0-9-_]+)/?$       index.php?pl1=$1&pl2=$2&pl3=$3&pl4=$4&pl5=$5&pl6=$6     [L] 

1 个答案:

答案 0 :(得分:1)

如果这个“ ...除了导航到文件夹... ”意味着现有的文件夹,您可以尝试在评论{{{}之前添加接下来的3行1}}:

# Remove trailing slash

只要没有空RewriteCond %{REQUEST_FILENAME} -f [OR] RewriteCond %{REQUEST_FILENAME} -d RewriteRule .* - [L] )的问题,就可以将规则减少到一个规则。像这样:

pl6=

使所有参数都是可选的,除了第一个参数。