2011-10-04 105 views
2

頁我有我的網站上搜索與友好的URL

<form class="clearfix" action="search.php" method="get"> 
       <h1>Search the Site</h1> 
       <input class="field" type="text" name="q" id="query" value="" size="23" /> 
       <input type="submit" value="Search" class="bt_login" /> 
</form> 

現在它發佈到search.php中搜索表單,但我想它發佈到/搜索/查詢 - 在這裏。我的.htaccess文件看起來像這樣現在

ErrorDocument 404 /index.php?p=404 

Options +FollowSymLinks 
RewriteEngine On 

RewriteRule ^(products|blog|feed|search|checkout|checkout)$ $1.php [nc] 
RewriteRule products/cat/(.*)$ products.php?type=cat&cat=$1 [nc] 
RewriteRule products/(.*)$ products.php?type=single&product=$1 [nc] 
RewriteRule blog/(.*) blog.php&post=$1 [nc] 
RewriteRule feed/(.*) feed.phptype=$1 [nc] 

RewriteRule search\.php?q=(.*)$ /search/$1 [R=301,L] 
RewriteRule search/(.*)$ search.php?q=$1 [NC] 

RewriteCond %{HTTP_REFERER} !^$ 
RewriteCond %{HTTP_REFERER} !^http://(www\.)?wghandcrafted.com/.*$ [NC] 
RewriteRule \.(gif|jpg|jpeg|psd|js|swf|flv|png)$ /feed/ [R=302] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^images/.*\.jpg$ /images/default.jpg [L] 

我該如何做到這一點?

+0

什麼GET字符串你得到表單提交時? – Mark

+0

表單發送獲取「q」進行查詢。它發佈get到search.php哪個起作用,但它需要被/ search/query – watzon

+0

在301-重定向RewriteRule中不應該使用'?'-character轉義? – anroesti

回答

2

我認爲辦法做到這一點,可能是

  1. 檢測已提交的表格
  2. 使用header()函數將用戶重定向到正確的URL。
  3. 讓.htaccess文件重寫URL在後臺
  4. 過程中的形式,如果正確的變量名,則

這很可能是無縫的,用戶將不知道發生了什麼。

所以......

與方法= 「郵報」 NAME = 「search_form」

<form class="clearfix" action="search.php" method="POST" name="search_form"> 
       <h1>Search the Site</h1> 
       <input class="field" type="text" name="q" id="query" value="" size="23" /> 
       <input type="submit" value="Search" class="bt_login" /> 
</form> 

的.htaccess修訂形式的http://website.com/search/search+term形式 獲取URL和重寫http://website.com/search.php?q=search+term在背景

RewriteRule ^search/(.*)$ /search.php?q=$1 [R=301,L] 

PHP

if ($_POST['search_form']) 
{ 

    // Get the search query 
    $search_query = $_POST['q']; 

    header("Location: search/" . urlencode($search_query)); 
    exit(); 
} 
else if ($_GET['q']) 
{ 
    $query_from_url = $_GET['q']; 

    echo "The query from the URL is" . $query_from_url; 
} 
+0

對不起,剛剛編輯了一大堆錯誤。它沒有經過測試,但如果您遇到任何問題,請將其發佈到此處。 – Luke

+0

爲什麼你使用PHP進行第一次重寫?在'.htaccess'中執行它會更快,因爲不需要加載PHP-interprenter。 – anroesti

+0

@andre_roesti我不知道有一種方法來獲取URL中的變量不幸的 – Luke

0

我想你可以刪除或註釋掉該行:

RewriteRule search\.php?q=(.*)$ /search/$1 [R=301,L] 

然後拿到表格提交到自身時,的search.php頁面上採取的變量和建立你想要的字符串,然後使用方法:

header("location:search/nice+string")

+0

,這不會幫助。基本上我需要做的是重定向search.php?q =查詢到/ search/query。 – watzon

+0

你是對的,我改變了上面的解決方案 – Mark