虽然.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
你可以看到它非常多余,而且我有很多这样的线条,所以它变得非常混乱。有什么方法可以定义“可选”部分吗?
答案 0 :(得分:4)
表达式.*
与var1
和var1/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的文章,其中更详细地介绍了这一点。