1

我有一个很好的基本 URL 重写,除了导航到文件夹时:

当用户导航到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

我的问题:

  • mydomain.com/folder如何在导航到或mydomain.com/folder/(不向 url 附加变量)时处理文件夹 correclty => 在文件夹中显示默认页面(/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] 
4

1 回答 1

1

如果此“ ...除非导航到文件夹... ”表示现有文件夹,您可以尝试在注释前添加接下来的 3 行# Remove trailing slash

RewriteCond %{REQUEST_FILENAME} -f  [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule .*   - [L]

只要有空pl6=)没有问题,就可以将规则减少到一个。像这样:

# Handle my GET variables
RewriteCond %{REQUEST_URI}  !index\.php
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,NC]

使所有参数可选,但第一个参数除外。

于 2013-04-26T13:28:25.820 回答