需要一个mod_rewrite .htaccess解决方案,用完成的URL中的-s替换%20空格

时间:2012-05-02 04:11:20

标签: .htaccess mod-rewrite cgi-bin

我需要一个.htaccess mod_rewrite解决方案,它将采用这样的.cgi搜索查询:

www.mydomain.com/cgi-bin/finda/therapist.cgi?Therapy_Type=Pilates Training& City = Los Angeles& State = CA

并在浏览器的地址栏中返回匹配结果,如下所示:

  • www.mydomain.com/therapists/Pilates-Training-Los-Angeles-CA.html

或更好:

  • www.mydomain.com/therapists/pilates-training-los-angeles-ca.html

请注意,数据库包含带有一个,两个或三个单词+空格的值...

例如:

Therapy_Type=Pilates Training <- includes a space

City=Los Angeles <- includes a space

State=CA <- no space

我使用http://www.generateit.net/mod-rewrite/处的工具生成以下RewriteRule:

RewriteEngine On
RewriteRule ^([^-]*)-([^-]*)-([^-]*)\.html$ /cgi-bin/finda/therapist.cgi?Therapy_Types=$1&City=$2&State=$3 [L]

这确实有效(找到搜索匹配项)并生成结果页面,但由于参数值中包含空格,我们最终得到的URL如下所示:

www.mydomain.com/therapists/Pilates%20Training-Los%20Angeles-CA.html

我在这个论坛上花了好几天时间和其他人试图找到解决这些%20(编码空格)的解决方案,以便最终返回的URL看起来像上面的1)或2)。

我知道这里有人必须知道如何做到这一点......帮助; - )

1 个答案:

答案 0 :(得分:0)

如果用%替换%20,那么你怎么知道治疗类型的终点和城市的开始?

pilates-training-los-angeles-ca

将是

type=pilates
city=training
state=los

所以我认为你不想用%替换%20。但是,您可以将其替换为另一个字符,例如_:

pilates_training-los_angeles-ca

然后,您必须将每个_转换为PHP脚本中的空格(或者您使用服务器端的任何语言)。