2009-05-06 2 views
3

С помощью нового Diggbar вы можете поставить http://digg.com перед любым URL-адресом, на котором вы сейчас находитесь, и создаст короткий URL-адрес Digg. Я только предполагаю, что они делают это modrewrite (хотя я не уверен, так как я новичок в этом все).Diggbar modrewrite- Как они передают URL-адреса через modrewrite?

Как это делается? Мне кажется, когда я пытаюсь это сделать с веб-сайтом, над которым я работаю, он бомбит.

Я хочу, чтобы иметь возможность сделать следующее:

http://example.com/http://stackoverflow.com/question/ask 

и имеют modrewrite, который позволит это пойти в

http://example.com/index.php?url=http://stackoverflow.com/question/ask 

Но когда я использую этот modrewrite:

RewriteEngine on 
RewriteRule ^([A-Za-z0-9]+)$ /message.php?id=$1 [L] 

не работает. Что я делаю не так?

ответ

5

Вы должны принять значение из request line, потому что Apache удаляет пустые сегменты пути. Первоначально запрошенный путь URI /http://foobar/ становится /http:/foobar/. Но строка запроса (THE_REQUEST) остается нетронутым:

RewriteCond %{THE_REQUEST} ^GET\ /(https?://[^\s]+) 
RewriteRule ^https?:/ index.php?url=%1 [L] 
+0

Отлично. Просто пришлось добавить «RewriteEngine на », и это сработало! Спасибо! – JoshFinnie

1

Вы ищете только буквы и цифры в этом регулярном выражении, поэтому он не будет подбирать двоеточие и косые черты. Вы также с помощью index.php в примере и message.php в HTAccess;)

Вы, вероятно, хотите что-то вроде этого:

RewriteEngine on 
RewriteRule ^http://(.+)$ /index.php?url=$1 [L] 

Это гарантирует, что вы только поймать URL-адреса здесь, и у вас все еще есть регулярные страницы! (Подумайте о том, что произошло бы, если бы вы перешли к example.com/index.php, вы попали бы в бесконечный цикл.)

+1

вы можете принять во внимание протокол HTTPS –

+0

Очень хорошо. Я никогда не умею перечитывать свои сообщения за небольшие уловы, такие как index.php вместо messages.php. Что касается учета https: // и http: //, какие шаги мне нужно предпринять для этого? – JoshFinnie

+0

Вы могли бы просто изменить регулярное выражение на^https?: // (. +) $ –