我想在我的.htaccess中添加一个指令,例如,如果浏览器指向包含%E4 (?)的URI或任何其他特殊字符,则.htaccess自动将%E4 (?)重写为%C3%A4 ä )。
总之,我想.htaccess将Win-1252百分比编码转换为UTF-8百分比编码。
我知道我可以通过添加一系列的mod_rewrite规则来做到这一点 – 但我想知道是否有一个本地.htaccess指令,将照顾到这一点。
====
这是迄今为止我自己已经得到的(我在.htaccess中的条目比在下面的列表中有更多的条目,但是为了示例目的,我已经删减了列表以供参考):
RewriteRule ([^\ä]*)\ä([^\ä]*\ä[^\/]*)(\/[.*])? $1%C3%A4$2$3 [N] RewriteRule ([^\ä]*)\ä([^\ä]*)$ http://www.domain.com/$1%C3%A4$2 [NE,R=301] RewriteRule ([^\é]*)\é([^\é]*\é[^\/]*)(\/[.*])? $1%C3%A9$2$3 [N] RewriteRule ([^\é]*)\é([^\é]*)$ http://www.domain.com/$1%C3%A9$2 [NE,R=301] RewriteRule ([^\î]*)\î([^\î]*\î[^\/]*)(\/[.*])? $1%C3%AE$2$3 [N] RewriteRule ([^\î]*)\î([^\î]*)$ http://www.domain.com/$1%C3%AE$2 [NE,R=301] RewriteRule ([^\ö]*)\ö([^\ö]*\ö[^\/]*)(\/[.*])? $1%C3%B6$2$3 [N] RewriteRule ([^\ö]*)\ö([^\ö]*)$ http://www.domain.com/$1%C3%B6$2 [NE,R=301] RewriteRule ([^\ü]*)\ü([^\ü]*\ü[^\/]*)(\/[.*])? $1%C3%BC$2$3 [N] RewriteRule ([^\ü]*)\ü([^\ü]*)$ http://www.domain.com/$1%C3%BC$2 [NE,R=301]
有人知道吗:
1)我怎样才能整理这个?
2)如果URI中有多个特殊字符(单个或多个),则不起作用。 有没有什么简单的方法来确保规则将处理多个特殊字符?
我能想到的只有在Apache内部使得这个更清洁的唯一方法就是使用RewriteMap 。
指向地图replacetxt会迫使你做一些可怕的事情来解决这个事实,即RewriteRulereplace整个string,你必须有一个RewriteRule发生在string中的每个字符(replace或不) 。
所以相反,我会说用你喜欢的语言编写一个外部脚本(最好是知道如何从1252转换到utf-8,而不需要硬编码的转换,python想到),将采取完整的string,直接进行必要的replace(在真正的代码中,而不是大量的mod_rewrite运行),然后传回固定的string进行replace。
RewriteMap win1252-to-utf8 prg:/path/to/executable RewriteRule - ${win1252-to-utf8:%{REQUEST_URI}}