2017-02-28 50 views
1

我試圖進行動態/漂亮的URL就像domain.com/p/term掌握一個GET形式

在我而言/ P漂亮的URL實際上是一個PHP腳本,通過一個.htaccess項目。

<Files "p"> 
    ForceType application/x-httpd-php 
</Files> 

term是搜索詞語,用來從數據庫

所以,如果「/術語」部分的URL提供的一切是好的獲取相關數據。問題是,如果請求只是「domain.com/p/」而沒有任何術語,我需要顯示一個表單來要求一個術語,並且由於我希望觀看者輸入的術語顯示在URL中,所以我認爲我應該使用GET表單。超級基本..或者看起來是這樣:/

<form action="/p/" method="GET"> 
<input type="text" name=pid> 
<input type="submit"> 
</form> 

提交時,它會導致URL爲domain.com/p/?pid=term

現在,我只需要找到如何國防部重寫到domain.com/p/term

我已經試過多次重寫規則並不能獲得期望的結果... 我最新的嘗試...

<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteBase/

#Rewrite GET search "/p?pid=term" => "/p/term" 
RewriteRule ^p\?pid=(.*)$ /p/$1 [L] 

#Rewrite GET search "/p/?pid=term" => "/p/term" 
RewriteRule ^p/\?pid=(.*)$ /p/$1 [L] 

不能看m觸發重寫,我仍然在地址欄中獲得/ p /?pid = term。

我查了幾個相關的問題,但似乎沒有解決這種情況。帶有線索棒的水龍頭將不勝感激。

回答

1

您無法使用RewriteRule與QueryString(?之後的Url部分)進行匹配。你需要來匹配%{QUERY_STRING}變量

RewriteEngine on 


RewriteCond %{QUERY_STRING} ^pid=(.+)$ 
RewriteRule ^p/?$ /p/%1? [L,R] 
+0

真棒..其實我不久後公佈發現了%{QUERY_STRING}的一部分,而我在隨後的嘗試RewriteCond看上去離你很近。我對規則很失望。非常感謝你。 –

0

它應該是如下

RewriteRule ^p/([0-9a-z]+) p/?pid=$1