С помощью нового 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, вы попали бы в бесконечный цикл.)