2013-01-20 61 views
0

我試圖讓page.php?title=foo更改爲/page/foo。我已經將它工作到了page.php轉到/ page /的地步,但是當我做page.php?title=foo時,它會將url重寫爲/page/title?title=foo使用Mod_Rewrite刪除GET查詢

我想刪除最後一個url的?title=foo部分。有任何想法嗎?

我對此很陌生 - 我試圖遵循教程,但不確定[OR][NC](等)的含義。

RewriteEngine on 
RewriteCond %{QUERY_STRING}  ^$    [OR] 
RewriteCond %{QUERY_STRING}  ^title=(.*)$ [NC] 
RewriteRule ^page.php$  page/%1  [NC,L,R=301] 

回答

1

你可以做這樣的事情:

RewriteEngine on 
RewriteRule page.php - [L] 
RewriteRule ^page/(.*)$ page.php/?title=$1 // $1 - content of() 

所以,當用戶問http://example.com/page/foo,Apache將打開他http://example.com/page.php/?title=foo。但adressbar仍與http://example.com/page/foo

+0

這產生了與問題相同的結果;除了能夠自己處理'page.php'(即沒有參數) – Sam

+0

當然,山姆!謝謝。提高。 –

+0

嗨;我正在尋找相反的重寫,即'/ page.php?title = foo'到'/ page/foo' – Sam

0

對於所有的開發者我的,我將所有請求轉發到index.php,我排除所有的CSS,JS,JP(E)G,PDF,ZIP等

的.htaccess

DirectoryIndex index.php 
#ErrorDocument 404 /index.php?page=404 
RewriteEngine on 
RewriteCond %{REQUEST_URI} !\.(.+)$ 
RewriteRule ^(.*)([^/])$ http://%{HTTP_HOST}/$1$2/ [L,R=301] 
RewriteCond %{REQUEST_URI} !\.(ico|docx|php|png|css|jpe?g|js|pdf|txt|mp3)$ 
RewriteRule ^(.*)$  index.php 

在PHP啓動代碼然後,

安裝瓦爾給內容,如果您使用$_GET後想.... 例:

<?php 
function rewrite(){ 
$link = $_SERVER['REQUEST_URI'];  
    $params = array("base_url", "locale", "page", "action", "par1", "par2", "par3", "par4"); 
    $extraParams = preg_match("/\?/i", $link, $extraParamsMatches); 
    if($extraParams){ 
     $link = explode("?", $link); 
     $link = $link[0]; 
    } 
    $link = explode("/", $link); 
    $i = 0; 
    $vals = array(); 
    foreach($link as $key => $value){ 
     if($params[$key] == "base_url") $value = $_SERVER['SERVER_NAME']; 
     //if(empty($value)) continue ; 
     $vals[$params[$key]] = $value; 
     if($i == sizeof($params)-1){   
      break; 
     } 
    $i++; 
    } 
    return $vals; 
} 
}  
?> 

重要 您可以編輯該代碼以提高安全性的實例消毒數據之前使用它在功能;-) 如果請求的頁面不是物理髮現或從PHP或數據庫的數組,你可以發送header('Location : ',true, 404);並給你的404頁!