允许htaccess查询字符串验证中的任何字符(非英文字符)

时间:2016-10-30 20:01:19

标签: .htaccess mod-rewrite non-latin

我有这个htaccess规则

RewriteRule ^page/([0-9a-zA-Z_-]+)/([0-9a-zA-Z_-]+)/([0-9a-zA-Z_-]+)/(.*)/([0-9a-zA-Z_-_]+)
/([0-9a-zA-Z_-]+)/([0-9a-zA-Z_-]+)$ page.php?lang=$1&search=$2&state_type=$3&city=$4
&stats=$5&area=$6&cost=$7 [NC,L]

第四个查询字符串是阿拉伯语,只要[0-9a-zA-Z_-]只对英文字符进行验证,我想允许任何字符。当我使用(。*)它允许任何英文字符,但当我插入阿拉伯字符时,我得到404错误。那么如何允许htaccess验证规则中的任何字符获取阿拉伯语值?

[UPDATE] 将htaccess规则更改为:

RewriteRule ^page/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)$ page.php?lang=$1&search=$2&
state_type=$3&city=$4&stats=$5&area=$6&cost=$7 [NC,L]

现在我没有得到404错误,但是当我回显查询字符串值(用阿拉伯语)时,我得到空值,当我将其更改为英语时,它工作正常。我试图将所有查询字符串值更改为阿拉伯语并得到相同的结果:空,因为它根本不存在。

1 个答案:

答案 0 :(得分:2)

尝试

RewriteRule ^page/([^/]+)/([^/]+)/([^/]+)/([^/]+)/([^/]+)/([^/]+)/([^/]+)$ page.php?lang=$1&search=$2&state_type=$3&city=$4&stats=$5&area=$6&cost=$7 [B,NC,L]

.过于贪心,所以只要找一些不是/的东西。 B标志将解码后的字符转换回适合查询字符串的转义字符。