【问题标题】:Formatting URLs with .htaccess and PHP使用 .htaccess 和 PHP 格式化 URL
【发布时间】:2011-04-19 09:38:09
【问题描述】:

我有一个搜索引擎脚本,它从 .htaccess 文件中格式化它的 URL。但是,在站点上进行搜索时,搜索 URL 为 /search/QUERY%20TERMS/1/。 (注意每个单词之间的 %20)。 PHP 或 .htaccess 有什么方法可以让我使用 + 而不是 %20?

我的 .htaccess 代码目前是这个。它格式化 SERP URL。

RewriteEngine on
RewriteRule ^search/([^/]+)/([^/]+)/?$ search.php?q=$1&category=web&d=$2
RewriteRule ^search/([^/]+)/$ /search/$1/1/ [R=301,L]
RewriteRule ^search/([^/]+)$ /search/$1/1/ [R=301,L]
RewriteRule ^search/?$ / [R=301,L]

我的 PHP 代码目前是这样的。它允许搜索框转到正确的 SERP,因为它具有复杂的 URL 结构。

<?PHP
if( isset( $_POST['q'] ) )
{
    header( 'location: search/' . $_POST['q'] . '/1/' );
    exit();
}
?>

如何让我的 URL 在 PHP 或 .htaccess 中使用 + 而不是 %20?

非常感谢任何帮助,在此先感谢。 卡勒姆

【问题讨论】:

  • 你是如何在网站上开始搜索的?

标签: php html .htaccess search


【解决方案1】:

在执行重定向之前,您只需 urlencode() (man page) 即可:

<?PHP
if( isset( $_POST['q'] ) )
{
    header( 'location: search/' . urlencode($_POST['q']) . '/1/' );
    exit();
}
?>

这与 .htaccess 或 mod_rewrite 没有任何关系。它是关于首先以正确的格式将 URL 传递给服务器。

【讨论】:

    【解决方案2】:

    urlencode() 的替代方法是将空格音译为另一个字符。例如 wikipedia 使用 _ 下划线代替空格,这看起来比 urlencode 中的 + 更好。

    header( 'location: search/' . (strtr($_POST['q'], " ", "_")) . '/1/' );
    // actually you should still apply urlencode() for other special chars
    

    当然,这需要在搜索脚本中撤消相同的操作:

    $q = strtr($_GET["q"], "_", " ");
    

    【讨论】:

      猜你喜欢
      • 2014-08-12
      • 2017-04-19
      • 2017-12-20
      • 1970-01-01
      • 2017-01-30
      • 2013-07-02
      • 1970-01-01
      • 2014-06-22
      • 2016-12-05
      相关资源
      最近更新 更多