使用GET表单获取漂亮的网址

时间:2017-02-28 18:24:39

标签: html .htaccess mod-rewrite

我正在尝试制作动态/漂亮的网址,例如domain.com/p/term

在我的情况下,/ p实际上是一个PHP脚本,通过.htaccess条目。

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

term是一个搜索词,用于从数据库中获取相关数据

因此,如果URL中提供了“/ term”部分,那么一切都很好。问题是,如果请求只是“domain.com/p/”而没有术语,我需要显示一个要求术语的表单,因为我希望查看器输入的术语显示在URL中,我想我应该使用GET表格。超级基本..左右似乎:/

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

提交后,会产生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]

似乎都没有触发重写,我仍然在地址栏中得到/ p /?pid = term。

我查看了几个相关的问题,但似乎没有解决这个问题。非常感谢带有线索棒的水龙头。

2 个答案:

答案 0 :(得分:1)

使用RewriteRule无法匹配QueryString(在?之后的Url部分)。您需要匹配%{QUERY_STRING}变量

RewriteEngine on


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

答案 1 :(得分:0)

应该如下

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