我可以t understand, why URL rewrite doesn
工作。
我有脚本,他们获取包含内容的文件。
if($pg){
if(file_exists("resources/pages/".$pg.".php")){
include("resources/pages/".$pg.".php");
}
else{
include("resources/pages/notfound.php");
}
}
else {
include("resources/pages/home.php");
}
htaccess,需要重写网址。需要重写类别,页面和语言字符串。
RewriteEngine On
RewriteRule ^([^/]*)/$ /?lang=$1 [NC,OR]
RewriteRule ^([^/]*)/$ /?cat=$1 [NC,OR]
RewriteRule ^([^/]*)/$ /?pg=$1 [NC,OR]
RewriteRule ^([^/]*)/([^/]*)/$ /?lang=$1&pg=$2 [NC,OR]
RewriteRule ^([^/]*)/([^/]*)/$ /?cat=$1&pg=$2 [NC,OR]
RewriteRule ^([^/]*)/([^/]*)/$ /?lang=$1&cat=$2 [NC,OR]
RewriteRule ^([^/]*)/([^/]*)/([^/]*)/$ /?lang=$1&cat=$2&pg=$3 [NC,L]
这显示内部服务器错误。如果我只留下第一行
RewriteEngine On
RewriteRule ^([^/]*)/$ /?lang=$1 [L]
只有语言切换工作正常。放第二行时
RewriteEngine On
RewriteRule ^([^/]*)/$ /?lang=$1 [NC,OR]
RewriteRule ^([^/]*)/$ /?cat=$1 [NC,L]
语言切换工作,但下一个规则不起作用。 :(
答案 0 :(得分:0)
OR
标记仅用于RewriteCond
,如果您尝试将其与RewriteRule
一起使用,则会给您一个错误。您遇到的问题是,就匹配模式而言,路由到/?lang=
,/?cat=
和/?pg=
的URI 相同。鉴于此网址:
http://yourdomain.com/blahblah/
使用 $ 1 ,所有3个模式(全部为^([^/]*)/$
)都匹配/blahblah/
和组blahblah
作为后退。但它是一个郎?它是猫吗?或者它是一个页面?您需要唯一地创建模式以匹配3中的每一个,并且它们必须是互斥的。
pg
参数只是数字吗?如果是这样,那么路由到它的模式应该是^([0-9]+)/$
。 lang变量只有2个字母吗?如果是这样,那么路由到lang的模式应该是^([a-z]{2})/$
。请注意,这仅适用于cat参数为1个字符或大于2,或包含数字和符号。
无论是什么,你都需要解决它。这就是你看到这种行为的原因。