首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >.htaccess -为Memento配置Apache服务器

.htaccess -为Memento配置Apache服务器
EN

Stack Overflow用户
提问于 2013-12-31 00:44:18
回答 2查看 146关注 0票数 0

我尝试将Apache服务器配置为添加指向Memento TimeGates url的HTTP Link header

我的htaccess:

代码语言:javascript
复制
RewriteEngine on

RewriteCond %{IS_SUBREQ} false
RewriteRule ^/(.*) - [E=ORIGURI:%{HTTP_HOST}/$1]

RewriteRule ^/(.*) - [E=ORIGQRY:]
RewriteCond %{QUERY_STRING} .+
RewriteRule ^/(.*) - [E=ORIGQRY:?%{QUERY_STRING}]

RewriteRule ^/(.*) - [E=ORIGPROTO:http]
RewriteCond %{HTTPS} on
RewriteRule ^/(.*) - [E=ORIGPROTO:https]

Header always set Link 
    "<http://purl.org/memento/timegate/%{ORIGPROTO}e://%{ORIGURI}e%{ORIGQRY}e>;rel=timegate"

.
.
.

原样不变:http://www.mementoweb.org/tools/apache/

我正在XAMPP服务器上测试代码,但是服务器发送的响应是:

代码语言:javascript
复制
.
.
.
Link    <http://purl.org/memento/timegate/(null)://(null)(null)>;rel=timegate
Server  Apache/2.4.3 (Win32) OpenSSL/1.0.1c PHP/5.4.7
.
.
.

htaccess有什么问题吗?

编辑1

移除林琼恩建议的前斜杠:

代码语言:javascript
复制
RewriteEngine On
RewriteCond %{IS_SUBREQ} FALSE
RewriteRule ^(.*) - [E=ORIGURI:$1]
RewriteRule ^(.*) - [E=ORIGQRY:]
RewriteCond %{QUERY_STRING} .+
RewriteRule ^(.*) - [E=ORIGQRY:?%{QUERY_STRING}]
RewriteRule ^(.*) - [E=ORIGPROTO:http]
RewriteCond %{HTTPS} on
RewriteRule ^(.*) - [E=ORIGPROTO:https]
Header always set Link "<http://purl.org/memento/timegate/%{ORIGPROTO}e://%{ORIGURI}e%{ORIGQRY}e>;rel=timegate"

服务器发送的新响应:

代码语言:javascript
复制
Link <http://purl.org/memento/timegate/http://(null)>;rel=timegate

正如我们所看到的,协议是被解析的,而不是url的其余部分,还有其他的建议吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-12-31 15:25:43

为Memento配置Apache服务器

1.使用.htaccess的HTTP标头

代码语言:javascript
复制
RewriteEngine On

RewriteRule ^(.*) - [E=ORIGPROTO:http]
RewriteCond %{HTTPS} on
RewriteRule ^(.*) - [E=ORIGPROTO:https]
RewriteRule ^(.*) - [E=ORIGURI:%{HTTP_HOST}]
RewriteCond %{THE_REQUEST} \s/+([^\s?]+)
RewriteRule ^ - [E=ORIGQRY:%1]

Header always set Link "<http://purl.org/memento/timegate/%{ORIGPROTO}e://%{ORIGURI}e%{ORIGQRY}e>;rel=timegate"

请参阅:htaccess - how to capture the current rewrited url?

2.使用的HTTP头

代码语言:javascript
复制
   function get_canonical_url($proto='http://'){
        $canonical_url = $proto;
        if($_SERVER["SERVER_PORT"] != "80") {
                $canonical_url .= $_SERVER["SERVER_NAME"] . ":" . $_SERVER["SERVER_PORT"] .  $_SERVER["REQUEST_URI"];
        } 
        else {
                $canonical_url.=$_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
        }
        return $canonical_url;
    }

    header('Link: <'.get_canonical_url().'>; rel="canonical"');

资源:http://moz.com/blog/how-to-advanced-relcanonical-http-headers

票数 0
EN

Stack Overflow用户

发布于 2013-12-31 00:56:20

您的规则具有这样的模式^/(.*),如果规则位于htaccess文件中,它将永远不会匹配。当在htaccess文件中应用规则时,Mod_rewrite从URI中删除前面的斜杠。删除模式中的前导斜杠:

代码语言:javascript
复制
RewriteRule ^(.*) - [E=ORIGURI:%{HTTP_HOST}/$1]

等等。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20849975

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档