在.htaccess上传递多个变量

时间:2013-09-11 07:39:50

标签: php .htaccess

我有这个.htaccess

RewriteEngine On
RewriteRule ^([0-9A-Za-z]+)/([0-9A-Za-z]+) index.php?category=$2&language=$1&id=$3
RewriteCond %{HTTP_USER_AGENT} libwww [NC,OR]
RewriteCond %{QUERY_STRING} ^(.*)=http [NC]
RewriteRule ^(.*)$ – [F,L]

Options +FollowSymLinks 
RewriteRule ^(.*)$ http://www.mydomain.com/$1 [L,R=301] 

我想要实现的是传递所有变量,但似乎我不能这样做。 我是.htaccess的新东西,所以代码可能是无稽之谈。但是,我设法传递了类别和语言,但可以传递id。

由于

4 个答案:

答案 0 :(得分:1)

这将有助于研究Perl正则表达式,这是RegEx样式.htaccess使用的。链接至:Apache docsRegEx info

即,对于您的第一个RewriteRule,您只有两个子组(括号部分),因此$3总是会产生空的 - 而$1$2将匹配相应的从左到右的有序群体。这里有一个如何匹配给你的RewriteRule的3个子组的样本:

RewriteRule ^([0-9A-Za-z]+)/([0-9A-Za-z]+)/([0-9]+) index.php?category=$2&language=$1&id=$3

注意匹配一个或多个数字的第三个括号部分 - 匹配的部分将被替换为$3反向引用,有效地将数字id放在您想要的位置。

答案 1 :(得分:1)

您可以拥有2个单独的第一个没有ID的规则,另一个具有ID:

RewriteRule ^([\da-z]+)/([\da-z]+)/(\d+)/?$ index.php?category=$2&language=$1&id=$3 [L,QSA,NC]
RewriteRule ^([\da-z]+)/([\da-z]+)/?$ index.php?category=$2&language=$1 [L,QSA,NC]

答案 2 :(得分:0)

如果您的ID是数字,请使用以下规则:

RewriteRule ^([0-9A-Za-z]+)/([0-9A-Za-z]+)/(\d+) index.php?category=$2&language=$1&id=$3

答案 3 :(得分:0)

试试这个

RewriteRule ^index/([^/]*)/([^/]*)/([0-9]+)$ index.php?language=$1&category=$2&id=$3 [L]