2017-02-28 53 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