使用新的Diggbar,您可以将http://digg.com
放在您当前所在的任何网址前面,它会创建一个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]
它不起作用。我做错了什么?
答案 0 :(得分: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 :(得分:1)
你只是在正则表达式中查找字母和数字,所以它不会拾取冒号和斜杠。您还在示例中使用了index.php,在htaccess中使用了message.php;)
你可能想要这样的东西:
RewriteEngine on
RewriteRule ^http://(.+)$ /index.php?url=$1 [L]
这确保您只能在此处捕获网址,并且您仍然可以拥有常规网页! (想想如果你去example.com/index.php会发生什么,你最终会陷入无限循环。)