ЧПУ некорректно работает с результатом urlencode

12
I
На сайте с 05.05.2010
Offline
91
1337

Добрый всем вечер!

Ситуация следующая:

Нужно сформировать страницу результатов нажатия на ссылку с тэгом "HSPA+". Чтобы плюсик не мешал жить, я обработал данный тэг функцией urlencode. В итоге в не ЧПУшной структуре это получилось так:

http://domain.com/tag.php?tag=HSPA%2B

все работало отлично.

Затем в .htaccess была прописана следующая инструкция:

RewriteRule ^tag/([0-9A-Za-z_\%2B\+]+)/$ tag.php?tag=$1

После чего данный URL приобрел вид

http://domain.com/tag/HSPA%2B/

теперь плюсик стал обрезаться, передается только HSPA, посмотрел через $_SERVER, выдает следующее:

[QUERY_STRING] => tag=HSPA+

[REQUEST_URI] => /tag/HSPA%2B/

[SCRIPT_NAME] => /tag.php

[PHP_SELF] => /tag.php

[argv] => Array

(

[0] => tag=HSPA

[1] =>

)

Помогите, плиз, разъясните почему при ЧПУ теряется обработанный урленкодом плюсик в урл, и как это можно поправить

Красивые запоминающиеся телефонные номера - больше звонков от клиентов! (https://nomergold.com?utm_source=searchengines.guru&utm_medium=signature&utm_campaign=forums)
[umka]
На сайте с 25.05.2008
Offline
456
#1

Ничего не понял, но попробуйте так

RewriteRule ^tag/([0-9A-Za-z_\%2B\+]+)/$ tag.php?tag=$1 [NE]

Лог в помощь!
I
На сайте с 05.05.2010
Offline
91
#2
'[umka:
;8909188']Ничего не понял, но попробуйте так
RewriteRule ^tag/([0-9A-Za-z_\%2B\+]+)/$ tag.php?tag=$1 [NE]

Попробыввал - все равно, обрезает обработанный плюсик в урле (%2B)

[umka]
На сайте с 25.05.2008
Offline
456
#3

А, ну всё верно, плюсик нужно заменять на %2B

I
На сайте с 05.05.2010
Offline
91
#4
'[umka:
;8909243']А, ну всё верно, плюсик нужно заменять на %2B

Я не очень понял, ведь в регулярке для .htaccess прописано и для случая "%2B" и просто для "+", просто "+" у меня влезает в урле, когда, там присутствует элемент из двух и более слов через пробел, например "texas instruments" urlencode обрабатывает как "texas+instruments" и дальше именно в таком виде он идет в урл, а затем переносится в ЧПУшную структуру без потерь, то есть в этом случае все отлично работает. А вот обрезается именно "%2B" и мне кажется что дело именно в "%"

[umka]
На сайте с 25.05.2008
Offline
456
#5

Всё ясно :)

Вот так напишите:

RewriteRule ^tag/([0-9A-Za-z_\+]+)/$ tag.php?tag=$1 [L]

%2B сервер сам преобразует в обычный плюсик

Во всяком случе, у меня с таким правилом скрипт tag.php показывает для двух uri

/tag/test+/

и

/tag/test%2B/

одиныковый $_SERVER['QUERY_STRING']:

tag=test+

I
На сайте с 05.05.2010
Offline
91
#6
'[umka:
;8909429']Всё ясно :)
Вот так напишите:
RewriteRule ^tag/([0-9A-Za-z_\+]+)/$ tag.php?tag=$1 [L]

%2B сервер сам преобразует в обычный плюсик

Во всяком случе, у меня с таким правилом скрипт tag.php показывает для двух uri
/tag/test+/
и
/tag/test%2B/
одиныковый $_SERVER['QUERY_STRING']:
tag=test+

Попробовал, все равно "+" (%2B) нивелирует:(

DyaDya
На сайте с 11.04.2007
Offline
147
#7

А так если регулярку замутить. У вас проблема именно в ней а не в urlencode

RewriteRule ^tag/(.)+/$ tag.php?tag=$1 [L]
Выбирайте качественный хостинг (http://vashmaster.ru/informaciya/o_poleznyh_programmah/news83.php) и продвигайте сайты в СЕОПУЛЬТ (http://seopult.ru/ref.php?ref=72b5ed9561fe66a1). А на «SAPE» я в обиде :) Не упрекайте за очепятки, пишу вслепую (http://ergosolo.ru/) и также делаю сайты (http://www.vashmaster.ru/) ;)
[umka]
На сайте с 25.05.2008
Offline
456
#8
ITXrelay:
Попробовал, все равно "+" (%2B) нивелирует:(

"Нивелирует" — это немного не то :) Вы, наверное, имели в виду "аннигилирует"?

Возможно, после этого правила выполняются ещё какие-то. Поэтому в конце нужна буковка [L].

Попробуйте всё сделать в чистом виде.

Одно правило, и один пустой скрипт с echo $_SERVER['QUERY_STRING']

А потом добавляйте по одной строчке. Так вы найдёте причину.

I
На сайте с 05.05.2010
Offline
91
#9
'[umka:
;8909487']"Нивелирует" — это немного не то :) Вы, наверное, имели в виду "аннигилирует"?
Возможно, после этого правила выполняются ещё какие-то. Поэтому в конце нужна буковка [L].
Попробуйте всё сделать в чистом виде.
Одно правило, и один пустой скрипт с echo $_SERVER['QUERY_STRING']
А потом добавляйте по одной строчке. Так вы найдёте причину.

Сделал так, как Вы сказали: очистил полностью .htacces прописал в нём только:

RewriteEngine on

RewriteRule ^tag/([0-9A-Za-z_\%2B\+]+)/$ tag.php?tag=$1 [L]

в файле tag.php прописал

echo $_SERVER['QUERY_STRING'];

print_r( $_SERVER['argv']);

все равно вместо "HSPA+" получается "HSPA ", то есть вместо плюсика пустое место

echo $_SERVER['QUERY_STRING'] выдает tag=HSPA+

print_r( $_SERVER['argv']); выдает

Array

(

[0] => tag=HSPA

[1] =>

)

Хочу к тому же отметить, что в неЧПУшной версии я работал с $_GET следующим образом: $tag=mysql_real_escape_string($_GET['tag']); - а дальше $tag я крутил как мне нужно, возможно здесь собака зарыта?

_alexxx
На сайте с 12.07.2007
Offline
123
#10

Я никак не совсем сообразил, так как в регулярке про .htaccess написано и про варианта "%2B" и элементарно про "+", элементарно "+" у меня лезет в урле, как скоро, вслед за тем присутствует вещество изо 2-ух и наиболее обещаний чрез пропуск, к примеру "texas instruments" urlencode возделывает будто "texas+instruments" и далее конкретно в этом облике дьявол соглашаться в урл, а потом выносится в ЧПУшную текстуру в отсутствии утрат, ведь имеется в данном случае безвыездно непревзойденно действует. А во обрезается конкретно "%2B" и ми видится будто ремесло конкретно в "%"

Крауд ссылки по 70р, опыт 4 года: https://linksboosters.com/ (https://linksboosters.com/)
12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий