我是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不会改变。我究竟做错了什么?感谢您的帮助:))
答案 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”。