2009-05-06 26 views
3

使用新的Diggbar,您可以将http://digg.com放在您当前所在的任何网址的前面,它将创建一个Digg短网址。我只是假设他们通过modrewrite这样做(尽管我不确定,因为我是新手)。Diggbar modrewrite-它们如何通过modrewrite传递URL?

这是如何完成的?在我看来,当我尝试使用我正在处理的网站时,它会爆炸。

我希望能够做到以下几点:

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] 
1

你只在那个正则表达式中寻找字母和数字,所以它不会拿起冒号和斜线。您还使用在htaccess的例子和message.php的index.php)

你可能想是这样的:

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

这可以确保你只能望尘莫及的网址在这里,和你仍然可以有正规的页面! (想想如果您访问example.com/index.php会发生什么情况,最终会陷入无限循环)。

+1

你可能要考虑到HTTPS – 2009-05-06 20:00:52

+0

非常好。我从不擅长重新阅读我的帖子,如index.php而不是messages.php。至于考虑到https://和http://,我需要采取哪些措施? – JoshFinnie 2009-05-06 21:05:50