台灣最大程式設計社群網站
線上人數
1062
 
會員總數:244893
討論主題:188887
歡迎您免費加入會員
討論區列表 >> PHP >> htaccess中文轉址,含「克」失敗?
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
htaccess中文轉址,含「克」失敗?
價值 : 100 QP  點閱數:1122 回應數:11

樓主

studycode
門外漢
0 42
1725 79
發送站內信

公司網址有 rewrite,我在 .htaccess寫的規則如下:
RewriteRule ^shop/sc=(.*)$ shopping.html?type=search&kw=$1
主要是要查詢商品用的,輸入的中文字都會用javascript的encodeURIComponent編碼,
查詢時會連結網址 shop/sc=輸入的中文,
自己測了很多中文字都可正確導向shopping.html?type=search&kw=輸入的中文
但唯獨查詢的關鍵字含有「克」這個字,就會出現錯誤
[an error occurred while processing this directive] The requested URL was not found on this server.

請問我哪裡寫錯了還是有什麼設定忘了做嗎??


搜尋相關Tags的文章: [ apache ] , [ htaccess ] ,
本篇文章發表於2017-01-16 15:35
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
1樓
回應

浩瀚星空
捐贈 VP 給 浩瀚星空 檢舉此回應
大多數來講,只能猜測是編碼的問題。
所以一般來說。rw規則盡量還是不要有需要碰上中文字編碼的可能性會比較安全

由於你並沒提供你的規則。所以我沒辦法知道你碰上的問題是什麼
本篇文章回覆於2017-01-16 17:23
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
回應

迷路
捐贈 VP 給 迷路 檢舉此回應
試試看把轉碼的動作拿掉,直接在網址中用中文字
我之前也認為要先轉成urlcode,後來發現直接用就可以了
不過我的網頁編碼是UTF-8,不確定其它編碼的情況
本篇文章回覆於2017-01-17 09:27
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
作者回應

studycode
檢舉此回應
*請問rw規則是說正則表示式嗎?
RewriteRule ^shop/sc=(.*)$ shopping.html?type=search&kw=$1
(.*)是比對任何字元沒錯呀~~
「克」編碼後是%E5%85%8B,我要查詢「克」會執行網址shop/sc=%E5%85%8B,
然後應該要轉到shopping.html?type=search&kw=%E5%85%8B,
但都是顯示The requested URL was not found on this server

*我中文要是不用url編碼,直接用也是一樣其他中文都可以,但含有「克」就不行,
我網頁編碼也是utf-8

*請問跟apache或php的設定會有關嗎?因為我是同樣的.htaccess和html程式
但在目前的server上查詢中文是沒問題的,在測試區server就不可查「克」><
#目前server是:apache2.2.22、php5.2.2
#測試區server氣:apache2.4.23、php7.0.13
本篇文章回覆於2017-01-18 17:36
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
最有價值解答

迷路
捐贈 VP 給 迷路 檢舉此回應
我測過apache2.4.16是OK的
我的寫法是這樣


RW的基礎寫法是正則式沒錯
如果能成功就表式寫法應該是正確的
有問題的應該是主機的系統或設定

突然注意到一個問題
你指定的目標是.html不是.php??
是直接設定.html也會執行<?php .... ?>編譯?
還是下面還有其它RW規則將它對應到.php?
你的查詢動作總不會是用js執行的吧?
本篇文章回覆於2017-01-19 09:58
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
作者回應

studycode
檢舉此回應
apache有設定讓html檔案可執行php程式,
我這次試著把程式最簡化,
tt.html


.htaccess只寫下面這兩行
RewriteEngine on
RewriteRule ^sc=(.*)$ http://tw.yahoo.com


真的想不通,為何只有「克」這個字匹配不了htaccess的規則??
打其他中文都可匹配到,然後轉到奇摩網站,
但「克」就一直匹配不到!!真是奇怪呀~~~舊server明明ok的~~
本篇文章回覆於2017-01-19 15:07
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
作者回應

studycode
檢舉此回應
我設定apache的rewrite去記錄log,下面那幾行有沒有高手能發現什麼問題呢?
我是先在tt.html查詢「克」,看log記錄了前三行,再查詢「大」,就是第四行以後的記錄,
發現前三行最後都有referer的資料,然後htaccess匹配失敗,
第四行之後就沒有referer,然後正常導向http://tw.yahoo.com

[perdir C:/WebSite/Web/shop/] strip per-dir prefix: C:/WebSite/Web/shop/sc=\xe5\x85\x8b -> sc=\xe5\x85\x8b, referer: http://192.168.1.81/shop/tt.html
[perdir C:/WebSite/Web/shop/] applying pattern '^sc=(.*)$' to uri 'sc=\xe5\x85\x8b', referer: http://192.168.1.81/shop/tt.html
[perdir C:/WebSite/Web/shop/] pass through C:/WebSite/Web/shop/sc=\xe5\x85\x8b, referer: http://192.168.1.81/shop/tt.html

[perdir C:/WebSite/Web/shop/] strip per-dir prefix: C:/WebSite/Web/shop/sc=\xe5\xa4\xa7 -> sc=\xe5\xa4\xa7
[perdir C:/WebSite/Web/shop/] applying pattern '^sc=(.*)$' to uri 'sc=\xe5\xa4\xa7'
[perdir C:/WebSite/Web/shop/] rewrite 'sc=\xe5\xa4\xa7' -> 'http://tw.yahoo.com'
[perdir C:/WebSite/Web/shop/] implicitly forcing redirect (rc=302) with http://tw.yahoo.com
[perdir C:/WebSite/Web/shop/] escaping http://tw.yahoo.com for redirect
[perdir C:/WebSite/Web/shop/] redirect to http://tw.yahoo.com [REDIRECT/302]
本篇文章回覆於2017-01-19 17:27
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
7樓
作者回應

studycode
檢舉此回應
sorry ~~被折行了~~~

1.[perdir C:/WebSite/Web/shop/] strip per-dir prefix: C:/WebSite/Web/shop/sc=\xe5\x85\x8b -> sc=\xe5\x85\x8b, referer: http://192.168.1.81/shop/tt.html
2.[perdir C:/WebSite/Web/shop/] applying pattern '^sc=(.*)$' to uri 'sc=\xe5\x85\x8b', referer: http://192.168.1.81/shop/tt.html
3.[perdir C:/WebSite/Web/shop/] pass through C:/WebSite/Web/shop/sc=\xe5\x85\x8b, referer: http://192.168.1.81/shop/tt.html
------------------------------------------------------------

4.[perdir C:/WebSite/Web/shop/] strip per-dir prefix: C:/WebSite/Web/shop/sc=\xe5\xa4\xa7 -> sc=\xe5\xa4\xa7
5.[perdir C:/WebSite/Web/shop/] applying pattern '^sc=(.*)$' to uri 'sc=\xe5\xa4\xa7'
6.[perdir C:/WebSite/Web/shop/] rewrite 'sc=\xe5\xa4\xa7' -> 'http://tw.yahoo.com'
7.[perdir C:/WebSite/Web/shop/] implicitly forcing redirect (rc=302) with http://tw.yahoo.com
8.[perdir C:/WebSite/Web/shop/] escaping http://tw.yahoo.com for redirect
9.[perdir C:/WebSite/Web/shop/] redirect to http://tw.yahoo.com [REDIRECT/302]
本篇文章回覆於2017-01-19 17:29
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
8樓
不錯的參考

迷路
捐贈 VP 給 迷路 檢舉此回應
請這樣測試
將網站的所有檔案先備份後移除,整個網站都刪乾淨
然後建立兩個檔案,內容只要我下面key的部分就好,不要其它任何的部分
shopping.php(注意!是PHP不是HTML)


.htaccess


最後直接開啟網頁
http://192.168.1.81/shop/克
看看結果如何
本篇文章回覆於2017-01-20 09:32
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
9樓
作者回應

studycode
檢舉此回應
to 迷路
照您說的做了,網站只有這兩個檔,都是utf-8編碼~
一樣只有「克」不行......
會出現下列訊息~
[an error occurred while processing this directive] The requested URL was not found on this server. If you entered the URL manually please check your spelling and try again. [an error occurred while processing this directive]

真是麻煩呀~~~~
本篇文章回覆於2017-01-20 13:55
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
10樓
作者回應

studycode
檢舉此回應
神奇的是,
我在.htaccess有設定網頁找不到 會導向 404.html

ErrorDocument 404 /404.html

網址我隨便亂key都會到404.html,但網址只要含有「克」就錯誤了!!
本篇文章回覆於2017-01-20 15:03
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
11樓
作者回應

studycode
檢舉此回應
發現不管中文有沒有url編碼,apache都會自動編碼後才到.htaccess去比對然後轉網址,
「克」是 %E5%85%8B ,經測試,只要編碼後的文字含有「%85%」就會錯誤,
因為真的查不出原因,只好想替代方案~~
在查詢時,將輸入的中文用js的encodeURIComponent轉碼後再將「%」用「$」取代,
然後就可在.htaccess比對正則(.*)成功,順利轉址,
在轉址後的程式再把「$」用「%」取代回來,再urldecode轉回中文~
目前是已解決我的問題了~~~
本篇文章回覆於2017-01-21 00:49
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.