访问root时的htaccess行为

时间:2012-01-19 16:16:35

标签: php .htaccess redirect

我一直在使用这个htaccess代码将vars传递给redirect.php,它为我处理包含:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^/?(.*)/(.*)/(.*)$ redirect.php?value1=$1&value2=$2&value3=$3 [L,QSA]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^/?(.*)/(.*)$ redirect.php?value1=$1&value2=$2 [L,QSA]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^/?(.*)$ redirect.php?value1=$1 [L,QSA]

但我注意到如果所有参数都为空,它将不会重定向,所以如果我转到http://domain.com/它将打开index.php,但如果我转到http://domain.com/any-param/ redirect.php句柄它是正确的。即使没有设置其他URL参数,我怎样才能使它始终使用redirect.php作为默认值?

2 个答案:

答案 0 :(得分:2)

你的规则对我来说似乎没问题。只需在最后添加这一行:

RewriteRule ^$ redirect.php [L]

这会将http://domain.com/重定向到http://domain.com/redirect.php

答案 1 :(得分:0)

用这样做:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^/([a-z]+)?/?([a-z]+)?/?([-a-z0-9]+)?/?$ [NC]
RewriteRule ^([a-z]+)/?([a-z]+)?/?([-a-z0-9]+)?/?$ /redirect.php?value1=$1&value2=$2&value3=$3 [NC,L]

注意:即使只有1个参数,这仍然有效,因为它只留下另外2个空白。因此,您只需删除一个条件,就不必复制和粘贴相同的代码。

我发现这不是很容易扩展。现在我只是将所有内容重定向到index.php并让该文件获取并解析URI以处理我的系统布局。这允许一个非常可扩展的系统。