我有一个基本的网址重写效果很好,除非导航到文件夹:
当用户导航到任何文件夹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/
时不显示文件夹中的默认页面(/folder/index.html;如果存在)(不将变量附加到网址)这是我的代码:
# 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]
答案 0 :(得分:1)
如果这个“ ...除了导航到文件夹... ”意味着现有的文件夹,您可以尝试在评论{{{}之前添加接下来的3行1}}:
# Remove trailing slash
只要没有空键(RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule .* - [L]
)的问题,就可以将规则减少到一个规则。像这样:
pl6=
使所有参数都是可选的,除了第一个参数。