模块接收/用于空(无路径)请求

时间:2015-09-05 16:20:13

标签: apache http url redirect

我正在开发一个Apache模块,可以帮助我消除重复的内容,但是我在检索真值时遇到了问题。

这是我可以提供的最基本的功能,使模块打印一个值并终止,无论我访问的URL是什么。

static int handler(request_rec *r){
  ap_rprintf(r,"%s\n",r->the_request);
  return DONE;
}

根据http://docstore.mik.ua/orelly/apache_mod/128.htm,它说明了

  

char * the_request   这包含请求的第一行,用于记录目的。

然后我在http://127.0.0.1:81

的本地服务器上运行了一些测试

当我在命令行上执行时:

curl http://127.0.0.1:81/

我收到以下内容:

GET / HTTP/1.1

当我在命令行上执行时:

curl http://127.0.0.1:81

我收到以下内容:

GET / HTTP/1.1

为什么the_request总是返回GET / HTTP/1.1而不是GET / HTTP/1.1GET HTTP/1.1

我想创建一个从http://127.0.0.1:81http://127.0.0.1:81/的重定向,以便谷歌或其他搜索引擎不会认为我有重复的内容。

当我将代码更改为:

static int handler(request_rec *r){
ap_rprintf(r,"%s\n",r->unparsed_uri);
return DONE;
}

我仍然遇到问题,因为我希望/和null分别尝试http://127.0.0.1:81/http://127.0.0.1:81

我怀疑这是HTTP或apache中的一个错误,但我想知道我能做些什么来解决这个问题。

我希望访问http://127.0.0.1:81以返回301重定向状态,其位置指向http://127.0.0.1:81/

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

  

为什么the_request总是返回GET / HTTP / 1.1而不是GET /   HTTP / 1.1和GET HTTP / 1.1?

HTTP要求请求网址中包含路径。客户经常让你省略它(以及方案),但在线上他们总是为你添加它。这只是一种方便,您可以键入" example.com"在浏览器中,它并不意味着没有与之相关的路径或方案。