我是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"。