2011-12-11 100 views
2

這似乎是一個不好的方式鏈接到我的網站。 從谷歌網站管理員工具,我看到一些404錯誤重寫和網址解碼

domain.com/file.php?id=1 (404) Not found (Date) 

該網址工作正常,但由於瀏覽器頁面解碼,真正的(404)網址是

domain.com/file.php%3Fid%3D1 (this is what my browser displays in the url input when I click on google url) 

我的第一次嘗試是

RewriteRule ^(.*)\%3F(.*)$ $1?$2 [R=301, L] 

%3F更改爲'?',但它不起作用。這是混淆了什麼是真實的和什麼是en /解碼。

感謝

+0

'的RewriteCond%{QUERY_STRING}^ID \%3D(+)''重寫規則^(。*)$ $ 1?編號=%1 [R = 301, L]'確實通過'='改變了%3D對於file.php?id%3D1。 – dstonek

+0

有關這方面的任何線索? – dstonek

+0

哦,你已經嘗試%3F了..嗯。可能還有其他事情正在進行。 – craniumonempty

回答

0

這不是一個優雅的解決方案,但幾個月後,這是我找到的唯一途徑。

正常情況下

domain.tld/dir/file.php?id=UID&qty=NUM&... (from old site structure) 

被改寫爲

domain.tld/newfile.php?id=UID&qty=NUM&... [R=301,L] 

所以,對於要求,是

domain.tld/dir/file.php%3Fid%3DUID%26qty=NUM%26... (from old site structure) 

我執行

RewriteRule ^dir/file\.php(.*)$ script.php?qs=$1 [R,L] 

這必須是涉及DIR/file.php

然後,我可以在script.php的

處理查詢字符串$ _GET [「QS」]所有指令後,它可能不適用於其他情況即會進入一個循環或不希望的結果。

+0

@craniumonempty這些未解碼的網址會生成404錯誤,因此404.php會顯示給用戶。我可以解碼REQUEST_URI並將其轉發到解碼後的URL(如果編碼和解碼版本不同)。這是一個很好的做法嗎?網絡蜘蛛首先會得到一個404頭,然後呢? – dstonek

0

嗯,試試這個:

RewriteRule ^(.*\%3F.*)\%26([^%]*)(\%3D)?(.*)$ $1&$2=$4 [N] 
RewriteRule ^(.*)\%3F([^%]*)(\%3D)?(.*)$ $1?$2=$4 [R=301,L] 

編輯:我看你已經測試%3F ......如果可以didn`t工作,然後還有其他事情可能的。

+0

不,它沒有工作。我不知道該怎麼做。沒有其他類似的規則可以影響http行爲。 – dstonek