我需要重写网址,但没有确切的顺序。
例如,我需要能够:
www.domain.com/sale
www.domain.com/sale/new-york
www.domain.com/sale/offices
www.domain.com/sale/chicago/villas
www.domain.com/new-york
www.domain.com/washington/offices
等等。最后,它必须是:
file.php?type=sale
file.php?type=sale&city=new-york
file.php?type=sale&category=offices
file.php?type=sale&city=chicago&category=villas
file.php?city=new-york
file.php?city=washington&category=offices
所以主要的想法是我没有特定的子文件夹顺序,我可以使用它来构建通用规则。
我发现这个问题的唯一解决方案是自动生成的.htaccess,其中包括所有可能的情况和请求的变体(假设类别名称永远不会与城市名称和/或类型相同)。< / p>
还有其他可能通过正则表达式实现这一目标吗?
谢谢!
答案 0 :(得分:2)
RewriteEngine On
RewriteRule \b(sale)\b /file.php?%{QUERY_STRING}&type=$1
RewriteRule \b(chigaco|new-york|washington)\b /file.php?%{QUERY_STRING}&city=$1
RewriteRule \b(villas|offices)\b /file.php?%{QUERY_STRING}&category=$1
我们使用:
\bsale\b: sale is a whole word delimited by word boundary.
\b(chigaco|new-york|washington)\b: cities names must be known.
\b(villas|offices)\b: category names must be predictable.
我用这个/file.php进行了测试:
This is file.php
<?php
echo "<pre>";
var_dump($_GET);
echo "</pre>";
?>
它重写http://www.example.com/sale/new-york/villas,file.php输出此内容:
This is file.php
array(3) {
["type"]=>
string(4) "sale"
["city"]=>
string(8) "new-york"
["category"]=>
string(6) "villas"
}
RewriteEngine On
RewriteRule \b(sale)\b /file.php?%{QUERY_STRING}&type=$1
RewriteRule \b(villas|offices)\b /file.php?%{QUERY_STRING}&category=$1
RewriteRule \bcity-([\w-]+)\b /file.php?%{QUERY_STRING}&city=$1
即,您必须在HTML文档中使用这样的URL:
http://www.example.com/sale/city-new-york/villas
http://www.example.com/sale/city-beijing/offices
http://www.example.com/sale/villas/city-berlin