Diggbar modrewrite. Как они передают URL-адреса через modrewrite?

С помощью нового Diggbar вы можете поместить http://digg.com перед любым URL-адресом, на который вы сейчас находитесь, и создать короткий URL-адрес Digg. Я только предполагаю, что они делают это 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] 

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

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

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

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

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

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

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