我正在尝试为我的网站设置两个不同的.htaccess
规则,但我仍然无法找到正确的解决方案。
我想在website.com/almost-everything
上路由一切 - 这对我很有帮助。而且,我想补充一下这条路线:website.com/car/car_id
- 这里有麻烦,我不知道如何设置它。
以下是我的尝试:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?skill=$1 [L,QSA]
RewriteRule ^car/(.*)$ ./index.php?id=car&car_id=$1 # the wrong rule - the page with website.com/car/car_id just doesn't display the correct file
你可以用第二条规则来帮助我吗?
答案 0 :(得分:1)
重写从顶部到底部逐行工作。
检查初始条件(文件不存在)后,它会遇到您的第一条规则。
它说,如果URL是什么,请修改它。它还有两个选项:
由于这个“L”,它会停止处理,并且在此规则之后没有任何反应。
解决此问题:
所以:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^car/(.*)$ ./index.php?id=car&car_id=$1 [L,QSA]
RewriteRule ^(.*)$ index.php?skill=$1 [L,QSA]
答案 1 :(得分:1)
而不是
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?skill=$1 [L,QSA]
RewriteRule ^car/(.*)$ ./index.php?id=car&car_id=$1 # the wrong rule - the page with website.com/car/car_id just doesn't display the correct file
我会这样做
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.+) - [PT,L] ## passthru + last rule because the file or directory exists. And stop all other rewrites. This will also help your css and images work properly.
RewriteRule ^car/(.*)$ /index\.php?id=car&car_id=$1 [L,QSA]
RewriteRule ^(.*)$ /index\.php?skill=$1 [L,QSA]
P.S。我用空行分隔我的规则,所以很清楚有多少。以上显示了3个不同的规则。
答案 2 :(得分:0)
更好的解决方案是将您的所有请求重定向到index.php
,然后解析$_SERVER['REQUEST_URI']
。那么你就需要为每一个新的未来改变htaccess。
在apache中你可以这样做>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /index.php [L]
在php中,您可以手动填写$_GET
,这样看起来就像您的旧请求......
$f = explode('/', substr($_SERVER['REQUEST_URI'], 1));
switch ($f[0]) {
case 'car' :
$_GET['id'] = $f[0];
$_GET['car_id'] = $f[1];
break;
default:
$_GET['skill'] = $f[0];
}
# your old code, that reads info from $_GET
更好的做法是上课,这将照顾网址。