我剛剛將我們的核心應用程序之一從Windows + IIS + Coldfusion移至Ubuntu + Apache + Lucee。第一個大問題是異國字母的URI編碼。Lucee URI編碼問題(西裏爾字母)
例如,試圖達到這個網址http://www.example.com/ru/Солнцезащитные-очки/saint-laurent/
導致這一紀錄在Apache的access.log:
http://www.example.com/ru/%D0%A1%D0%BE%D0%BB%D0%BD%D1%86%D0%B5%D0%B7%D0%B0%D1%89%D0%B8%D1%82%D0%BD%D1%8B%D0%B5-%D0%BE%D1%87%D0%BA%D0%B8/saint-laurent/
嗯,我認爲這是正確的URL編碼。然後,我在.htaccess文件中使用重寫規則,以便在url查詢字符串參數(讓我們說「foo」)中獲取url部分(西里爾文的一部分)。
使用cflog傾倒,我看到在應用程序日誌:
/index.cfm?foo=оÑки-длÑ-зÑениÑ&
...這顯然是錯誤的,因爲我需要的是原始的字符串,UTF-8西里爾。
我試圖把的URIEncoding參數在我的server.xml中的Tomcat HTTP連接器,但沒有任何結果:
<Connector port="8888" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
URIEncoding="UTF-8" />
我怎樣才能在UTF-8我的URL參數?
我會嘗試的第一件事是隔離tomcat並直接測試。即嘗試http://主機名:8888/index.cfm?foo =Солнцезащитные-очки。如果工作正常 - 你的問題是在Apache/mod_rewrite方面。這可能有助於聚焦這個問題。如果還存在問題,您還可以查看tomcat訪問日誌以進一步隔離(也許這確實是lucee問題,而不是tomcat問題)。 –
我試過了,如果我直接調用通過西里爾文參數的lucee,它就會起作用。所以...是一個Apache的mod_rewrite問題?爲什麼它會改變我的編碼?!? –
我不能告訴你(不是我的知識領域)。但是,您可以將問題重新編寫爲Apache/Mod,並提供一些細節,以便該領域的一些專家可以提供幫助(儘管看起來您應該完全不使用這些URL)。 –