.htaccess可选字符?

时间:2009-04-16 22:02:55

标签: php regex .htaccess

虽然.htaccess,我想将/ page / var1 / var2重定向到./page.php?var1=var1&var2=var2。这很容易但是我想这样做/ page / var1也重定向到./page.php?var1=var1(没有var2)。我这样做的唯一方法是:

RewriteRule page/(.*)$ ./page.php?var1=$1
RewriteRule page/(.*)/(.*)$ ./page.php?var1=$1&var2=$2

你可以看到它非常多余,而且我有很多这样的线条,所以它变得非常混乱。有什么方法可以定义“可选”部分吗?

3 个答案:

答案 0 :(得分:4)

表达式.*var1var1/var2匹配,因此第一条规则适用于两者。

因此,您必须指定第一条规则仅匹配var1。这可以通过将.(任何字符)替换为[^/](除/之外的任何字符)来完成。所以试试这个:

RewriteRule ^page/([^/]+)$ ./page.php?var1=$1
RewriteRule ^page/([^/]+)/([^/]+)$ ./page.php?var1=$1&var2=$2

编辑您也可以在一个规则中写下这个:

RewriteRule ^page/([^/]+)(/([^/]+))?$ ./page.php?var1=$1&var2=$3

答案 1 :(得分:2)

mod_rewrite不太适合这种繁重的工作,请将其留给PHP应用程序。

 RewriteRule page/(.*)$ ./page.php?vars=$1

在page.php附近的某处:

 <?php
 $vars = explode('/',$_GET['vars']);
瞧,瞧,你有一系列的变种;现在你可以在那里进行一些处理,看看你的应用程序需要什么/可选,并做出相应的反应。

答案 2 :(得分:1)

最好的方法是将所有内容交给PHP脚本。

我写了一篇关于如何做friendly URLs的文章,其中更详细地介绍了这一点。