mod_rewrite在URL的开头有可选变量

时间:2017-11-23 09:23:17

标签: apache .htaccess mod-rewrite

我想设置mod_rewrite来处理多种语言,但我无法让它正常工作。

我希望以下工作:

example.com/en/page/abc - > example.com/page.php?language=en&id1=abc example.com/en/page/abc/def - > example.com/page.php?language=en&id1=abc&id2=def

我的.htaccess文件如下所示:

    RewriteEngine On

    RewriteRule ^(.*)/page/(.*)/(.*)  page.php?case=a1&language=$1&id1=$2&id2=$3
    RewriteRule ^(.*)/page/(.*)  page.php?case=a2&language=$1&id1=$2

现在,如果我输入url'en / page / abc'它可以正常工作,但是如果我输入'en / page / abc / def'它会执行第二个规则并将'page.php'作为语言和'abc' / def'作为id1的变量。撤销订单仍然会将“page.php”作为语言的值。有人建议如何解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

用([a-z] +)替换第一个(。*)就可以了。

我的.htaccess现在看起来像这样:


    RewriteRule ^([a-z]+)/page/(.*)/(.*)        page.php?language=$1&id1=$2&id2=$3
    RewriteRule ^([a-z]+)/page/(.*)             page.php?language=$1&id1=$2