.htaccess问题

时间:2011-10-27 18:16:51

标签: .htaccess mod-rewrite

我有一个页面可以完成两件事:

当用户点击此链接时: http://www.example.com/whatever_200/index.html/?id=4它实际上由处理 http://www.example.com/search/profile-condo.php?id=4

但是,我也想为巴西人做以下事情 www.example.com/br/whatever_200/index.html/?id=4 www.example.com/br/search/profile-condo.php?id=4

以下适用于英文版:

addhandler x-httpd-php5 .html
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/index.html$ /search/profile-condo.php?name=$1&%{QUERY_STRING} [L,QSA]

但是当我添加

RewriteRule ^(.*)/br/^(.*)/index.html$ /br/search/profile-condo.php?name=$1&%{QUERY_STRING} [L,QSA]

它不起作用。

我做错了什么?

1 个答案:

答案 0 :(得分:1)

您的规则有三个问题。

首先是规则顺序。第一条规则将匹配以/index.html结尾的任何内容,并执行重定向。它被(正确地)标记为最终规则(L标志)。因此,第二条规则永远不会被执行。如果您在一般规则之前添加br规则,则会先测试它,如果匹配,则会发生重定向。

第二个问题是第二条规则的正则表达式。它在表达式的中间包含一个旋转^。旋律意味着字符串的开始,这显然不会出现在字符串的中间。移除抑扬符将解决这个问题。

第三个问题是,您在网址的/br/部分之前允许使用字符(在表达式中使用(.*)。根据您的描述,您实际上并不需要此。

汇总:

addhandler x-httpd-php5 .html
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/br/(.*)/index.html$ /br/search/profile-condo.php?name=$1&%{QUERY_STRING} [L,QSA]
RewriteRule ^(.*)/index.html$ /search/profile-condo.php?name=$1&%{QUERY_STRING} [L,QSA]