我正在开发一个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.1
和GET HTTP/1.1
?
我想创建一个从http://127.0.0.1:81
到http://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/
有什么建议吗?
答案 0 :(得分:1)
为什么the_request总是返回GET / HTTP / 1.1而不是GET / HTTP / 1.1和GET HTTP / 1.1?
HTTP要求请求网址中包含路径。客户经常让你省略它(以及方案),但在线上他们总是为你添加它。这只是一种方便,您可以键入" example.com"在浏览器中,它并不意味着没有与之相关的路径或方案。