处理 - 参数值中的字符

时间:2013-10-07 08:38:38

标签: php .htaccess

我的网址:

http://www.abc.com/search_result.php?parrent_prop_type=value1&prop_type_name=-value2&location=value-3&prop_type_auto_id=value4

想要改变

http://www.abc.com/value1-value2-value-3-value4

我的规则:

RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+search_result\.php\?parrent_prop_type=([-0-9a-zA-Z]+)\&prop_type_name=([-0-9a-zA-Z]+)\&location=([-0-9a-zA-Z]+)\&prop_type_auto_id=([-0-9a-zA-Z]+) [NC]
RewriteRule ^ http://abc.com/%1-%2-%3-%4? [R=301]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([-0-9a-zA-Z]+)-([-0-9a-zA-Z]+)-([-0-9a-zA-Z]+)-([-0-9a-zA-Z]+)/?$ search_result.php?parrent_prop_type=$1&prop_type_name=$2&location=$3&prop_type_auto_id=$4 [NC]

重写正常工作,但是在search_result.php上有问题。 实际上search_result.php无法正常工作。我无法在搜索页面上获得正确的参数值。 这是由于 - 参数中的字符。因为当我从值中移除 - 字符然后它正常工作。

我该怎么办?

谢谢!

1 个答案:

答案 0 :(得分:1)

您不能使用连字符作为分隔符,并且希望能够在分隔值内匹配它。

以下面的例子为例:

bo-b-fred-jam-es-arth-ur

它不会知道哪些是您的分隔符连字符以及哪些是实际值。

选择不同的分隔符,或者不匹配带有连字符的值。

如果必须匹配值中的连字符,或许使用下划线作为分隔符会更明智:

bo-b_fred_jam-es_arth-ur

然后它将匹配:

RewriteRule ^([\-0-9a-zA-Z]+)_([\-0-9a-zA-Z]+)_([\-0-9a-zA-Z]+)_([\-0-9a-zA-Z]+)/?$ search_result.php?parrent_prop_type=$1&prop_type_name=$2&location=$3&prop_type_auto_id=$4 [NC]