2009-04-16 67 views
2

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

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

正如你可以看到它是非常多余的,我有一吨这样的线,所以它变得非常混乱。任何方式来定义“可选”部分?

回答

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 
2

mod_rewrite并不适合这种繁重的工作,将它留给您的PHP应用程序。

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

和附近的某处page.php文件的开头:

<?php 
$vars = explode('/',$_GET['vars']); 

瞧,你有你的增值经销商的数组;现在你可以在那里做一些处理,看看你的应用程序需要/可选的东西,并做出相应的反应。

+0

谢谢你,所以基本上,这是不可能的。htaccess的做到这一点? – Yifan 2009-04-16 22:26:50

+0

这是可能的,但正如你已经发现的那样,这不是很实际。 – Piskvor 2009-04-19 18:11:27

1

最好的办法是把所有东西都交给你的PHP脚本。

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