【问题标题】:Friendly URL from query srings URL来自查询字符串 URL 的友好 URL
【发布时间】:2012-09-27 18:04:09
【问题描述】:

当我在我的网站上键入搜索以获取像 mysite.com/searach/blabla/video 这样的 URL 而不是 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&amp;type=video

【问题讨论】:

  • 您可以使用 .htaccess 规则来重写网址

标签: php url search friendly-url


【解决方案1】:

您可以使用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

【讨论】:

  • JKirchartz 我已经用我的搜索表单更新了我的问题,你能告诉我更多关于如何使它适用于我的搜索表单的详细信息吗?
  • @ColaDeu 使用@gllen 的RewriteCondRewriteRule ...表单将始终使用get 方法提交,将QUERY_STRING 放入URL,@gllen 的方法将重写显示您想要的结果
  • 我做到了,它按我的需要工作。但我还有另一个问题。与空间。此功能仅在搜索关键字不包含空格时有效。如果我搜索 BlaBla,我会得到 SEF URL,但如果我搜索 Bla Bla。我得到 ?search=Bla+Bla&type=video。你能告诉我如何在 gllen 的这段代码中修复它吗? RewriteCond %{QUERY_STRING} ^search=(\w+)&type=(\w+)$
  • @ColaDeu 你应该可以使用[B] flag 来逃避它们,所以试试:[B,R,L]
  • 如果我在搜索关键字中输入空格 + 或 - 它会给我一个查询网址
【解决方案2】:

正如其他人所说,如果您使用的是 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 url 的示例,例如,让 apache 服务

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

..幕后时

http://mysite.com/A/B

.. 被请求

【讨论】:

  • gllen 我已经配置了 .htaccess 您给我的代码也适用于 .htaccess 吗?我应该在我的页面或搜索表单中添加什么代码以使其按我希望的方式运行?
【解决方案3】:

您可以使用 apache Mod Rewrite,但对于刚学习它的人来说可能会令人沮丧。或者,您可以将您的网站移动到诸如 drupal、wordpress 或 joomla 之类的 cms 上,并让它自动为您创建一个别名。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    相关资源
    最近更新 更多