来自查询字符串URL的友好URL

时间:2012-10-07 02:28:09

标签: php url search friendly-url

在我的网站上输入搜索以获取mysite.com/searach/blabla/video而不是mysite.com/?search=blabla&type=video的网址时,最佳方法是什么? 请不要告诉我,我必须使用CodeIgniter,因为它没有帮助。我确信我所需要的只是PHP中的一个小函数。

这是我的search.php

<form id="searchwrapper" name="searchform">
<input type="text" class="searchbox" id="txtSearch" name="search" alt="Search Criteria" />
<input type="submit" src="../images/empty.png" class="searchbox_submit"/>

<p id="circ">
<input  type="radio" id="mp3" name="type" checked value="mp3"/>
<label class="circ-btn normal" for="mp3">mp3</label>
                        </p>
<p id="circ">
<input type="radio" id="album" name="type" <?php echo $radio2;?> value="album"/>
<label class="circ-btn normal" for="album">Album</label></p>                
</form>

我的.htacces规则设置正确;当我使用mysite.com/searach/blabla/video直接访问我的网站时,它工作正常,但这不是问题。当我在我的网站上输入搜索时,我需要这样的链接。相反,我得到此链接并且不正确mysite.com/?search=blabla&type=video

3 个答案:

答案 0 :(得分:2)

您可以使用mod_rewrite,并将其放入.htaccess文件

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^search/([^/\.]+)/([^/\.]+)/?$ index.php?search=$1&type=$2 [L]

然后在你的php中使用它

$URI = substr($_SERVER['REQUEST_URI'], 1);
$URIparts = explode("/", $URI);

这会给你一个包含url部分的数组。

另外,您应该尝试sanitize the input以确保安全。

答案 1 :(得分:1)

正如其他人评论的那样,如果您使用的是apache,则需要mod_rewrite。

如果您确实想要输入搜索并以SEF URL结尾,如您所述,您需要以下内容:

RewriteCond %{QUERY_STRING} ^search=(\w+)&type=(\w+)$
RewriteRule ^ http://mysite.com\/%1\/%2? [R,L]

..这会重定向请求,例如

http://mysite.com/index.php?search=A&type=B

..到

http://mysite.com/A/B

..和JKirchartz提供的示例使用php脚本作为SEF网址,例如,使用apache服务

http://mysite.com/video.php?search=A&type=B

..幕后的

http://mysite.com/A/B
请求

..

答案 2 :(得分:0)

你可以使用apache Mod Rewrite,虽然对于刚刚学习它的人来说可能会令人沮丧。或者,您可以将您的站点移动到像drupal,wordpress或joomla这样的cms,并让它自动为您创建别名。