htaccess多个参数不起作用


htaccess multiple parameters not working

我是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)。第二次重写规则是我的登录页,其他页面的根与第一次重写规则中的根相同。当我在本地测试这个规则时,我的登录页会按预期显示(在浏览器中键入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'

但网站仍然停留在我的登录页上——就像它写在第二个重写规则中一样

我还试图设置更多的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

网站仍然没有改变。我做错了什么?感谢您的帮助:)

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

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"answers"d=3"。