0

我有这个 .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

4 回答 4

2

稍微学习一下 Perl 正则表达式会有所帮助,这是 .htaccess 使用的 RegEx 样式。链接到:Apache 文档RegEx 信息

也就是说,对于您的第一个 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在您想要的位置。

于 2013-09-11T07:44:12.187 回答
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]
于 2013-09-11T08:00:46.453 回答
0

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

RewriteRule ^([0-9A-Za-z]+)/([0-9A-Za-z]+)/(\d+) index.php?category=$2&language=$1&id=$3
于 2013-09-11T07:43:22.123 回答
0

试试这个

RewriteRule ^index/([^/]*)/([^/]*)/([0-9]+)$ index.php?language=$1&category=$2&id=$3 [L]
于 2013-09-11T07:44:17.717 回答