我有一个搜索引擎脚本,可以从.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?
非常感谢任何帮助,在此先感谢。 卡勒姆
答案 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"], "_", " ");