mod_rewrite

12 3
[Удален]
1401

Вобщем, хотел сделать скриптик, чтобы перекидывать со своего сайта на другой сайт посредством редиректа (еще чтобы Яндекс и прочие не считали ссылки внешними). Делаю простеший скрипт на PHP url.php:


header("Location: {$_GET['url']}");

Т.е. sait.zone/url.php?url=https://searchengines.guru/ будет перекидываться редиректом на https://searchengines.guru/

Работает.

Хочу сделать красиво (SEF URL ну или даже скорее ЧПУ), чтобы переписывалась ссылки вида

sait.zone/url.php?url=http://somesite.zone/ на sait.zone/url/http://somesite.zone/

в принципе опять же обычное дело...

В .htaccess добавляю строчку

RewriteBase /

RewriteRule ^url/(.+)$ url.php?url=$1 [L]

Всё понятно - то, что после url/ является адресом сайта для редиректа.

Прикол в том, что стирается второй слеш после http:

То есть, если переписать правило на

RewriteRule ^url/(.+)$ url.php?url=$1 [R]

и зайти при помощи ссылки sait.zone/url/http://somesite.zone/ то она перепишется на sait.zone/url.php?url=http:/somesite.zone/

Как победить и с чем это связано?

Проверяю на Denwer (какой точно не скажу - с php 5.2.4 который :) ), ОСь Windows XP SP2.

[Удален]
#1
So1:
Вобщем, хотел сделать скриптик, чтобы перекидывать со своего сайта на другой сайт посредством редиректа (еще чтобы Яндекс и прочие не считали ссылки внешними). Делаю простеший скрипт на PHP url.php:

header("Location: {$_GET['url']}");

Т.е. sait.zone/url.php?url=https://searchengines.guru/ будет перекидываться редиректом на https://searchengines.guru/

Работает.

Хочу сделать красиво (SEF URL ну или даже скорее ЧПУ), чтобы переписывалась ссылки вида
sait.zone/url.php?url=http://somesite.zone/ на sait.zone/url/http://somesite.zone/

в принципе опять же обычное дело...

В .htaccess добавляю строчку
RewriteBase /
RewriteRule ^url/(.+)$ url.php?url=$1 [L]

Всё понятно - то, что после url/ является адресом сайта для редиректа.

Прикол в том, что стирается второй слеш после http:

То есть, если переписать правило на
RewriteRule ^url/(.+)$ url.php?url=$1 [R]
и зайти при помощи ссылки sait.zone/url/http://somesite.zone/ то она перепишется на sait.zone/url.php?url=http:/somesite.zone/
Как победить и с чем это связано?

Проверяю на Denwer (какой точно не скажу - с php 5.2.4 который :) ), ОСь Windows XP SP2.

потому что апач его съедает

попробуйте напишите вы ведь увидите форум ))

сут ьв том, что он множественные слеши на один заменяет еще до обработки реврайт енжином.

а вы прсто делайте $_GET['url'] = preg_replace("#^http:/#i","http://",$_GET['url']);

:)

[Удален]
#2
bearman:
потому что апач его съедает
bearman:
сут ьв том, что он множественные слеши на один заменяет еще до обработки реврайт енжином.

https://searchengines.guru/

срабатывает же :) Вопрос как раз в том, как сделать чтобы этого не происходило... Возможно есть какая то волшебная фраза... прописал в .htaccess и слеши не съедаются... :)

bearman:
а вы прсто делайте $_GET['url'] = preg_replace("#^http:/#i","http://",$_GET['url']);:)

Ну это моя самая первая мысль была :) Просто думается, что все же можно сделать по-человечьи, а дополнительное форматирование я не считаю человеческим методом :)

К тому же разумней переписывать :/ на :// т.к. ссылки на документы, использующие протоколы ftp:// и https:// не будут работать.

В любом случае, спасибо за ответ. ;-)

[Удален]
#3
So1:
https://searchengines.guru/
срабатывает же :) Вопрос как раз в том, как сделать чтобы этого не происходило... Возможно есть какая то волшебная фраза... прописал в .htaccess и слеши не съедаются... :)

Ну это моя самая первая мысль была :) Просто думается, что все же можно сделать по-человечьи, а дополнительное форматирование я не считаю человеческим методом :)
К тому же разумней переписывать :/ на :// т.к. ссылки на документы, использующие протоколы ftp:// и https:// не будут работать.

В любом случае, спасибо за ответ. ;-)

вы видимо плохо читали мой ответ.

https://searchengines.guru/

И

https://searchengines.guru/

совершенно разные вещи. https://searchengines.guru/ - обрабатывается апачем до обработки реврайтом(на этом этапе слеши и стрипятся.

https://searchengines.guru/ - тут прямо передается управление пхп.

в этом и проблема. читайте лучше, не хочется по 2 раза разжовывать)

[Удален]
#4

В конец строчки с RewriteRule попробуйте дописать [NE]

[Удален]
#5
neolord:
В конец строчки с RewriteRule попробуйте дописать [NE]

съедает...

[Удален]
#6

используй кодирование йоупт! :))

base64_encode и base64_decode для свои ссылок и будет тебе счастие! йоу! ))))))

а вообще заходи

http://phpdude.ru стараюсь писать полезные шняги

[Удален]
#7

кстати мысль тут пришла. недавно была похожая проблема.

Вы наверно файрфоксом открываете?

neolord добавил 26.10.2008 в 21:09

bearman:
используй кодирование йоупт! :))

base64_encode и base64_decode для свои ссылок и будет тебе счастие! йоу! ))))))
а вообще заходи

http://phpdude.ru стараюсь писать полезные шняги

и как же он через мод_рерайт закодирует в бэйз64 ?=)

[Удален]
#8
neolord:
кстати мысль тут пришла. недавно была похожая проблема.
Вы наверно файрфоксом открываете?

neolord добавил 26.10.2008 в 21:09


и как же он через мод_рерайт закодирует в бэйз64 ?=)

а зачем модрерайтом в бейз64 кодировать? на пхп то не судьба чтоли? :-D жжете сударь.

[Удален]
#9

base64 != ЧПУ ;)

прийдется все же preg_replace юзать, наверное :)

Всем большое спасибо за обсуждение ;-)

bearman, почитал - не впечатлило :) То есть, для себя ничего нового не нашел. Ничего личного и уж тем более не хотел обидеть.

PS напишете про многопоточный AJAX-загрузчик файлов на сервер, чтобы можно было в несколько потоков загружать файлы и видеть процесс (скорость загрузки отдельного файла + прогресс бар к нему) с реализацией на PHP и поддержкой кроссбраузерности, - вот тогда я буду ОЧЕНЬ рад и неимоверно счастлив :) Потому что как это сделать самому мозгов не хватает.... мозг начинает ломаться почти сразу - на PHP нельзя юзать функцию fopen (изза политики безопасности), а при помощи JavaScript нельзя работать с файлами... :) Вроде все просто - взял файл, посчитал сколько весит, разбил на 100, загрузилась 1/100 часть - нарисовал на экране при помощи AJAX процентик, потом еще загрузилась часть - добавил еще процентик... )) Просто, а хрен сделаешь, ну или по крайней мере я признаюсь, что у меня не достаточно знаний для реализации подобной штуки :(

[Удален]
#10

Тык у ТС же в скрипт уже без слеша попадает зачем там бейз64.

Вообще у мя была такая проблема - набираю в фоксе адрес www.site.ru// например, в скрипте проверяю $_SERVER['REQUEST_URI'] и вижу там один слеш. В ие видно два ну и 404 ессно. Так что можете просто передавать через хтакссес отдельной переменной протокол, а второй адрес без хттп:// всяких

Насчет загрузки файлов как вы сказали это по-моему фантастика. Все подобные вещи делаются явой но никак не JS+PHP, ибо из js вы не получите доступа к файлам а значит и не разобьете ни на какие кусочки ну и т.п. Возможно когда нить в браузерах появится поддержка свойтсва типа "LoadPercent" у ифреймов, тогда можно об этом вспомнить =)

12 3

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