Diggbar modrewrite - как они передают URL через modrewrite? - PullRequest
3 голосов
/ 06 мая 2009

С новым 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]

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

Ответы [ 2 ]

5 голосов
/ 15 мая 2009

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

RewriteCond %{THE_REQUEST} ^GET\ /(https?://[^\s]+)
RewriteRule ^https?:/ index.php?url=%1 [L]
1 голос
/ 06 мая 2009

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

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

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

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

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