2013-02-08 27 views
1

我在我的数据库中有类别名称,而某些主题带有法语字符,如èèê。 它可以根据需要直到今天,当我尝试添加另一个字符到它,然后我开始服务器错误带重写规则的法语字符

这里是我的.htaccess:

Options +FollowSymlinks 
RewriteEngine on 
RewriteRule ^([A-Za-z0-9éèêà_-\s]+)-(\d+)\.htm$ classified.php?id=$2 [L] 

正如你所看到的,它工作正常,而不一个。

如何将该东西添加到正则表达式中?

+0

检查:[htaccess的国防部\ _rewrite与口音](http://stackoverflow.com/questions/10451601/htaccess-mod-rewrite-with-accents)。实际上,在.htaccess中加入重音字符似乎是不可能的。 – j0k 2013-02-08 20:38:08

+0

[mod_rewrite的'b'标志](http://httpd.apache.org/docs/2.4/rewrite/flags.html#flag_b)上的[Apache文档]应该可以帮助你解决这个问题。 – Carsten 2013-02-08 20:40:39

+0

为什么不使用[^重音符号]?我认为它在某些情况下更好 – 2013-02-08 20:43:00

回答

1

如果您正在使用的所有类型的字符和重音字母的,那么为什么不只是让任何东西去通过?

注:使用此规则也允许空格;

Options +FollowSymlinks 
RewriteEngine on 
RewriteRule ^(.*)-(\d+)\.htm$ classified.php?id=$2 [L] 

而且以后如果你决定限制正则表达式,可以说你不希望任何的这些字符#$%,那么你必须做出例外:

Options +FollowSymlinks 
    RewriteEngine on 
    RewriteRule ^([^#$%]+)-(\d+)\.htm$ classified.php?id=$2 [L] 
2

似乎URL中的扩展ASCII字符以UTF-8格式和网址编码方式发送。例如:

/éèêà-1.htm -> /%C3%A9%C3%A8%C3%AA%C3%A0-1.htm 

上面的网址可以通过mod_rewrite的这样的匹配:

RewriteEngine On 
RewriteRule ^(?:\w|\xC3\xA9|\xC3\xA8|\xC3\xAA|\xC3\xA0)+-(\d+)\.htm$ classified.php?id=$1 [L]