我正在尝试制作动态/漂亮的网址,例如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。
我查看了几个相关的问题,但似乎没有解决这个问题。非常感谢带有线索棒的水龙头。
答案 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