2016-05-16 57 views
2

我正在爲我的search.php頁面尋找正確的htaccess規則。因爲我嘗試了幾次,但沒有奏效。我現有的htaccess規則可能會與它衝突。所以我也在這裏粘貼我當前的htaccess文件。目前,我有以下搜索網頁網址查詢字符串:htaccess for search.php的規則頁面

http://my-domain.com/search.php?q=keyword 

我想下面的清潔網址:

http://my-domain.com/search/keyword 

我的HTML形式是:

<form method="get" action="search.php"> 
    <input type="text" name="q" class="txtfield" value="<?php echo $q; ?>" placeholder="Search post here..." /> 
</form> 

的htaccess:

Options +FollowSymlinks -MultiViews 

RewriteBase/

#Enable mod rewrite 
RewriteEngine On 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([^/]+)$ page.php?category=$1 [QSA,L] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)/([^/]+)$ page.php?category=$1&post=$2 [QSA,L] 

請注意,我沒有在上述文件中搜索相關的htaccess規則,因爲我說沒有任何工作。我總是看到404頁面。這就是我刪除它的原因。

而且如果我把表單提交按鈕,在未來的某個象下面這樣:

http://my-domain.com/search.php?q=keyword&btnsearch=Search 

然後我想知道什麼校正/修改我將:

<form method="get" action="search.php"> 
    <input type="text" name="q" class="txtfield" value="<?php echo $q; ?>" placeholder="Search post here..." /> 
    <input type="submit" name="btnsearch" class="btn" value="Search" /> 
</form> 

我的搜索URL將改變必須在正確的htaccess規則中執行,您將根據我的第一個查詢向我提供哪些規則?如果搜索網址包含兩個或兩個以上的查詢字符串,我們是否應該有兩條規則?請幫助我這個傢伙。謝謝。

回答

1

當表單提交它確實會讓你的網址爲:

http://my-domain.com/search.php?q=keyword&btnsearch=Search 

要保留您所提交的網址很需要防止表單提交使用Javascript代碼,使URL很喜歡這個。

<html><head> 
<script> 
function prettySubmit(form, evt) { 
    evt.preventDefault(); 
    window.location = form.action + '/' + form.q.value.replace(/ /g, '+'); 
    return false; 
}  
</script> 
</head><body> 
<form method="get" action="search" onsubmit='return prettySubmit(this, event);'> 
    <input type="text" name="q" value="<?php if (isset($_GET['q'])) echo $_GET['q']; ?>" 
     class="txtfield" placeholder="Search post here..." /> 
    <input type="submit" name="btnsearch" class="btn" value="Search" /> 
</form> 
</body></html> 

這將提交您的形式向漂亮的URL

http://my-domain.com/search/keyword 

現在你需要在你的根此規則。htaccess處理這個漂亮的URL;

Options -MultiViews 
RewriteEngine On 

RewriteRule ^search/(.+)$ search.php?q=$1 [L,QSA,NC] 

更新:

這裏是一個辦法做到這一點完全使用mod_rewrite規則,而無需使用任何JS。在root.htaccess中使用以下規則:

Options -MultiViews 
RewriteEngine On 
RewriteBase /my-project/ 

# external redirect from actual URL to pretty one 
RewriteCond %{THE_REQUEST} /search(?:\.php)?\?q=([^\s&]+) [NC] 
RewriteRule^search/%1? [R=302,L,NE] 

# internal forward from pretty URL to actual one   
RewriteRule ^search/(.+)$ search.php?q=$1 [L,QSA,NC] 
+0

好吧,但我不明白爲什麼每個人都建議使用JavaScript?爲什麼只能在PHP/htaccess中完成?如果有人在他的瀏覽器中關閉了JS,會發生什麼?你能告訴我如何在沒有JS的情況下做到這一點嗎? – user5307298

+0

我想要一個解決方案,可以在兩種情況下工作 - 一個沒有提交按鈕和提交按鈕的表單。我需要兩種情況下的htaccess規則。 – user5307298

+0

嗯..那麼什麼是[http://matthewjamestaylor.com/blog/how-to-post-forms-to-clean-rewritten-urls](http://matthewjamestaylor.com/blog/how-to-post -form-to-clean-rewritten-urls)for? – user5307298

1

1.去除php擴展(可選)

RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC] 
RewriteRule^%1 [R=301,L] 

2.Support http://my-domain.com/find/keyword

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^find/([^/\.]+)$ /search.php?keyword=$1 

3.測試

<?php 
if ($_POST['query'] != '') { 
    header('Location: /find/' . $_POST['query']); 
} 
echo $_GET['keyword']; 
?> 
<form method="post" action=""> 
    <fieldset> 
     <input type="text" name="query" /> 
     <input type="submit" value="Search" /> 
    </fieldset> 
</form> 

希望這有助於。

+1

'find.php'如何進入圖片? OP顯示該文件是'search.php' ... –

+0

,因爲'search/keyword'中的'search'名稱不應該與文件名search.php相同,所以我給了它另一個名字。 – keziah

+1

這沒有意義... –