Форматирование URL с помощью .htaccess и PHP - PullRequest
0 голосов
/ 19 апреля 2011

У меня есть скрипт поисковой системы, который форматирует его URL из файла .htaccess.Однако, когда поиск выполняется на сайте, поисковый URL имеет / search / QUERY% 20TERMS / 1 /.(Обратите внимание на% 20 между каждым словом).Есть ли способ с PHP или .htaccess, который я могу иметь + вместо% 20?

Мой код .htaccess в настоящее время это.Он форматирует URL-адреса SERP.

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-код в настоящее время таков.Это позволяет окну поиска переходить к правильному поисковому запросу, поскольку оно имеет сложную структуру URL.

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

Как я могу получить в моих URL + + вместо 20 в PHP или .htaccess?

Любая помощь очень ценится, спасибо заранее.Каллум

Ответы [ 2 ]

1 голос
/ 19 апреля 2011

Альтернативой urlencode() будет транслитерация пробела для другого символа.Например, в Википедии вместо пробелов используется символ подчеркивания _, который выглядит лучше, чем + из urlencode.

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

Конечно, это требует отмены того же самого в поисковом скрипте:

$q = strtr($_GET["q"], "_", " ");
1 голос
/ 19 апреля 2011

Вы можете просто urlencode() (man-страница) , прежде чем выполнять перенаправление следующим образом:

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

Это не имеет ничего общего с .htaccess или mod_rewrite. Во-первых, это URL-адрес, который передается на сервер в правильном формате.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...