我如何为我的搜索查询正则表达htaccess

时间:2010-12-27 13:31:01

标签: apache .htaccess mod-rewrite

我的网址示例

http://domain.com/search.php?s=search&w=state&t=town&c=category&p=1

  • s =搜索关键字
  • w = region
  • t = town
  • c = category
  • p = paging

我现在在.htaccess中所做的是

RewriteRule ^([^/]*)/([^/]*)/([^/]*)/([^/]*)/([^/]*)/$ /search.php?s=$1&w=$2&t=$3&c=$4&p=$5 [L]

网址为

http://domain.com/search/keyword/region/town/category/1/

问题

如何重写我的.htaccess以使我的URL可以是全局查询。

示例s=bmw+5+series&w=&t=&c=

http://domain.com/search/bmw-5-siries/

示例s=bmw+5+series&w=&t=&c=car

http://domain.com/search/car/bmw-5-siries/

示例s=bmw+5+series&w=manchester&t=&c=car

http://domain.com/search/manchester/car/bmw-5-siries/

或查询字词中的其他输出。

这可能吗?

1 个答案:

答案 0 :(得分:1)

最简单的方法是编辑SEO网址,在搜索字词前添加一个字符,以识别搜索到的字词。

即。

/搜索/ BMW-5系列/ R /曼彻斯特/ C /汽车 要么 /搜索/ BMW-5系列/ C /豪华

并使用变量和RewriteCond来识别要应用的RewriteRule。

使用您当前的方法,除非您有固定的规则,否则很难确定第三项(例如汽车)是否是城镇或类别或其他内容。 (即如果Town被传递,则区域肯定会被传递,因此您可以编写一组不同的规则来处理每个条件而不是现在的单一规则)

例如

RewriteRule ^([^/]*)/([^/]*)/$ /search.php?s=$1&w=$2 [L]
RewriteRule ^([^/]*)/([^/]*)/([^/]*)//$ /search.php?s=$1&w=$2&t=$3 [L]
RewriteRule ^([^/]*)/([^/]*)/([^/]*)/([^/]*)/$ /search.php?s=$1&w=$2&t=$3&c=$4 [L]
RewriteRule ^([^/]*)/([^/]*)/([^/]*)/([^/]*)/([^/]*)/$ /search.php?s=$1&w=$2&t=$3&c=$4&p=$5 [L]