htaccess多个参数不起作用

时间:2013-11-19 09:28:42

标签: php apache .htaccess mod-rewrite

我是htaccess文件的新手,所以我很乐意请你帮忙:

在我的htaccess文件中,我有下一行:

RewriteEngine on 

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f

RewriteRule ^alpe-adria(.*)$ site/index.php$1 [L]
RewriteRule ^alpe-adria$ site/index.php?box=1&d=3 [L]

所以,首先我要设置索引文件,即在站点文件夹中,以显示为上面的字符串(alpe-adria)。第二个RewriteRule是我的登录页面,其他页面具有与第一个RewriteRule中相同的根。当我测试此规则时,我的目标网页会按预期显示(在浏览器中输入localhost / alpe-adria)。但是如果我想转到其他页面,例如基本的URL:

http://localhost/site/index.php?d=1&box=1&grp=306&level=1

RewriteRule行为正常,将其重写为

'http://localhost/alpe-adria?d=1&box=1&grp=306&level=1'

但是网站stil停留在我的目标网页上 - 就像它写在第二个RewriteRule

中一样

我还试图设置更多RewriteCond并添加另一个RewriteRule:

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^alpe-adria?d=([^/]+)&box=([^/]+)&grp=([^/]+)&level=([^/]+)$ site/index.php?d=$1&box=$2&grp=$3&level=$4

和网站stil不会改变。我究竟做错了什么?感谢您的帮助:))

1 个答案:

答案 0 :(得分:0)

为什么不使用这条规则(没有任何条件)?

RewriteCond %{QUERY_STRING} box=
RewriteRule ^alpe-adria$ /site/index.php [L]

RewriteCond %{QUERY_STRING} ^$
RewriteRule ^alpe-adria$ /site/index.php?box=1&d=3 [L]

如果您的规则目标中没有?,则查询字符串(?之后的所有内容)将自动附加到结尾。你的规则不起作用的原因可能是条件:

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f

RewriteRule ^alpe-adria(.*)$ site/index.php$1 [L]

我怀疑你实际上没有一个名为“/alpe-adria.php”的文件,因此条件失败,因此规则永远不会被应用(否则,那可能有效)。

您的第二条规则没有条件,只是:

RewriteRule ^alpe-adria$ site/index.php?box=1&d=3 [L]

这个不会追加查询字符串,因为你将它硬编码为“box = 1”和“d = 3”。