2010-02-16 45 views
0

我有一個網址http://domain.com/module/controller/action/get1/value1/?get2=value2&get3=value3我想使用Mod_Rewrite將?&=更改爲適當的/斜槓,與第一個GET變量內聯。Mod_Rewrite將GET值對更改爲斜槓

我還需要避免衝突與我目前的mod_rewrite的規則:

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} -s [OR] 
RewriteCond %{REQUEST_FILENAME} -l [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule ^.*$ - [NC,L] 
RewriteRule ^.*$ zend.php [NC,L] 
+0

你能澄清一下你想要轉換網址的方式嗎?用戶輸入的傳入網址是否有斜槓或經典格式? – 2010-02-16 13:06:17

回答

0

我無法找到一個很好的辦法做到這一點,所以,我決心在我zend.php的頂部寫一些最小的PHP代碼。

list($sURL, $sQuery) = explode('?', $_SERVER['REQUEST_URI']); 
$sOriginalURL = $sURL; 
if ('/' !== substr($sURL, -1)) $sURL .= '/'; 
if (isset($sQuery)) { 
    foreach (explode('&', $sQuery) as $sPair) { 
     if (empty($sPair)) continue; 
     list($sKey, $sValue) = explode('=', $sPair); 
     $sURL .= $sKey . '/' . $sValue . '/'; 
    } 
} 
if (isset($sQuery) || $sOriginalURL !== $sURL) header(sprintf('Location: %s', $sURL)); 

如果有人可以改進,請在下面評論。

0

如果你不需要他們的母語$_GET容器中的GET參數,你可以離開htaccess文件原樣,並有前端控制器(我假設你使用PHP)做解析,而不是mod_rewrite。

你必須訪問$_SERVER["REQUEST_URI"]和任何其他URL解析(我想你正在使用Zend框架)之前,解析出參數踢英寸

這只是工作,如果你可以修改的部分你程序需要value1value2value3等。如果它是某個需要參數的Zend組件,並且該組件直接從$_GET中獲取它們,那麼這對您不適用,您可能實際上必須構建mod_rewrite指令。

順便說一句,你知道通過依照你的.htaccess的方法,無效鏈​​接,圖像,CSS文件和其它媒體類型都將被路由到zend.php的方式嗎?

+0

我需要在Mod_Rewrite中完成它,因爲我使用了很多內置的函數來重寫url,因爲假設GET params不是?&= ...此外,我的應用程序正常處理正確的HTTP代碼鏈接... – Simon 2010-02-16 14:24:36

0

嘗試把這些規則在你的面前:

RewriteCond %{QUERY_STRING} ^([^&=]+)=([^&]+)&(.+) 
RewriteRule^%{REQUEST_URI}%1/%2/?%3 [N] 
RewriteCond %{QUERY_STRING} ^([^&=]+)=([^&]+)$ 
RewriteRule^%{REQUEST_URI}%1/%2/? [L,R] 
+0

這不是錯誤的方式嗎?我認爲他希望不匹配的URL爲/ get1/value1/....並將其轉換爲內部的GET參數。 – 2010-02-16 10:10:52