我有一个页面可以完成两件事:
当用户点击此链接时: 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]
它不起作用。
我做错了什么?
答案 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]