1

我不能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");
   }

还有需要重写 URL 的 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]

语言切换工作,但下一个规则不起作用。:(

4

1 回答 1

0

OR标志仅用于 a RewriteCond,如果您尝试将其与 a 一起使用,它会给您一个错误RewriteRule。您遇到的问题是,就匹配模式而言,路由到/?lang=/?cat=和的 URI/?pg=相同的。鉴于此网址:

http://yourdomain.com/blahblah/

您的所有 3 个模式(全部)都使用$1^([^/]*)/$匹配/blahblah/和分组blahblah作为反向引用。但它是一个lang吗?是猫吗?或者它是一个页面?您需要唯一地创建模式以匹配这 3 个中的每一个,并且它们必须是互斥的。

参数是否pg只有数字?如果是这样,那么路由到它的模式应该是^([0-9]+)/$. lang 变量只有 2 个字母吗?如果是这样,那么路由到 lang 的模式应该是^([a-z]{2})/$. 请注意,这仅在 cat 参数为 1 个字符或超过 2 个字符或包含数字和符号时才有效。

不管是什么,你都需要解决它。这就是你看到这种行为的原因。

于 2013-01-23T17:30:48.933 回答