使用.htaccess和PHP格式化URL

时间:2011-04-19 09:38:10

标签: php html .htaccess search

我有一个搜索引擎脚本,可以从.htaccess文件格式化它的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();
}
?>

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

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

2 个答案:

答案 0 :(得分:1)

在执行重定向之前,您可以urlencode() (man page)进行此操作:

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

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

答案 1 :(得分:1)

urlencode()的替代方案是将空间音译为另一个角色。例如,维基百科使用_下划线代替空格,这看起来比urlencode中的+更好。

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

当然,这需要在搜索脚本中撤消相同内容:

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