2012-10-06 148 views
0

我不擅長php和codeigniter給了我最大的。我的網站是一個搜索引擎,我做了一個搜索後,我的網站的url是這樣的:mysite.com/?search=eminem & type = mp3我不喜歡它。 我想這樣做,所以當我鍵入搜索阿姆給我這個網址:mysite.com/eminem/mp3 下面是從CI代碼CodeIgniter和查詢字符串問題

<?php 

class Pages extends CI_Controller { 

    public function view($page = 'home') 
    { 
     if (! file_exists('application/views/pages/'.$page.'.php')) 
    { 
     // Whoops, we don't have a page for that! 
     show_404(); 
    } 

    $data['title'] = ucfirst($page); // Capitalize the first letter 
    $this->load->view('templates/header', $data); 
    $this->load->view('pages/'.$page, $data); 
    $this->load->view('templates/footer', $data); 
    } 
} 

我有什麼其他的代碼在這裏補充到將qwery字符串轉換爲路徑?

這裏是routes.php文件

$route['default_controller'] = 'pages/view'; 
$route['(:any)'] = 'pages/view/$1'; 

$route['404_override'] = ''; 

這裏是home.php我的搜索形式

<form id="searchwrapper" name="searchform">           <input type="text" class="searchbox" id="txtSearch" name="search" />          <input type="image" src="../images/empty.png" class="searchbox_submit"/>         

<p id="circ"> 
    <input type="radio" id="mp3" name="type" checked value="mp3"/> 
    <label class="circ-btn normal" for="mp3">Mp3</label></p> 
<p id="circ">     
    <input type="radio" id="album" name="type" <?php echo $radio2;?> value="album"/> 
    <label class="circ-btn normal" for="album">Album</label></p> 
</form> 

這裏的.htaccess

<IfModule mod_rewrite.c> 
     RewriteEngine On 
     RewriteBase /ci/ 
     #Checks to see if the user is attempting to access a valid file, 
     #such as an image or css document, if this isn't true it sends the 
     #request to index.php 
     RewriteCond %{REQUEST_FILENAME} !-f 
     RewriteCond %{REQUEST_FILENAME} !-d 
     RewriteRule ^(.*)$ index.php?/$1 [L] 
</IfModule> 
+0

$ config ['uri_protocol']在您的配置文件中設置爲什麼? – Laurence

+0

$ config ['uri_protocol'] \t ='AUTO'; –

+0

你可以發佈.htaccess文件的內容並仔細檢查以確保mod_rewrite已啓用? –

回答

1

假設的mod_rewrite已經工作,然後你可以在你的routes.php中設置它

$route['default_controller'] = 'pages/view'; 
$route['(:any)'] = 'pages/view/$1'; 
$route['(:any)/(:any)'] = "pages/search/$1/$2"; 

我正在區分pages/searchpages/view,所以它會更少混淆。 順便說一句,這必須是您的routes.php文件中的最後一個路由,因此它具有低優先級,並且不會與以下示例中的特定路由衝突。因爲如果它位於路線文件的頂部,那麼訪問users/list將被視爲search=users&type=list

$route['users/list'] = "users/list"; 
$route['pages/list'] = "pages/list"; 

然後在你的頁面控制器中。

public function search($search = '', $type = '') 
{ 
    // $search now contains $1 and $type contains $2 
    // instead of $_GET['search'] and $_GET['type'] 
} 

希望有所幫助。

+0

我是否必須在公共功能搜索($ search ='',$ type ='')中寫一些東西,因爲不工作 –

+0

嗨,那麼,您如何顯示搜索結果?你只需使用相同的代碼。我假設你已經有了搜索功能。你只是想美化你的網址。 – ace