2011-07-27 41 views
1

我有一個奇怪的網址請求到我的網站的問題..可能來自機器人或其他網站.. 我研究了我所有的代碼和鏈接在網上..但沒有找到而像 他們以正確的順序要求不是網址鏈接是:需要php腳本來重寫URL查詢字符串

/modules.php?file=article&name=News&sid=281737 

,但正確的應該是

/modules.php?name=News&file=article&sid=281737 

其實PHP可以處理那些...但我使用靜態緩存系統,它使緩存中的兩個文件。製作大量文件不利於網絡性能。

我需要使用$ _ SERVER [「REQUEST_URI」]和正則表達式來檢測錯誤的URL PHP腳本,然後將其發送到正確的URL與301頭

感謝您的任何意見。

回答

2

在Web服務器級別執行此操作。既然你標記你的問題.htaccess我假設這是Apache。

RewriteEngine On 
RewriteCond %{QUERY_STRING} file=(.*)&name=(.*)&sid=(.*) 
RewriteRule modules.php modules.php?name=%2&file=%1&sid=%3 [R=301,L] 

我還沒有測試過,它工作嗎?

+0

它的工作偉大的..謝謝一噸 – binh

0

你可以嘗試這樣的事情 -

<?php 

if (preg_match ('/file=article\&name=Name/', $_SERVER['REQUEST_URI'])) { 
    header ('HTTP/1.1 301 Moved Permanently'); 
    header ('Location: ' . str_replace('file=article&name=Name', 'name=Name&file=article', $_SERVER['REQUEST_URI']); 
} 

或更通用的一個

<?php 

if (preg_match ('/file=(.*)\&name=(.*)/', $_SERVER['REQUEST_URI'], $matches)) { 
    header ('HTTP/1.1 301 Moved Permanently'); 
    header ('Location: ' . preg_replace('/file=(.*)&name=([^&]*)/', 'file=${1}\&name=${2}', $_SERVER['REQUEST_URI'])); 
}