HTTPS化 Edit

転送の設定方法(ウェブ一般の方法)は方々に載っているが,実際にこのサイトで,特にPukiWikiで動かすには修正が必要だった。2018年 3月 3日

RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://over.6pb.info$1 [R=301,NE,L]

NEが必要。また,URLの後ろを「/$1」とすると「/」が二重に付加された。

最新のページをデフォルトページに Edit

ページを指定せずPukiWikiにアクセスしたとき、「FrontPage」ではなく、最後に更新されたページが表示されるようにする。(RecentChangesページではない。)PukiWiki初期状態だとFrontPageという名のページ(index.php?FrontPage)が出る。別の選択肢。


  • vhost.confまたはhttpd.conf
    RewriteEngine On
    RewriteMap wiki_entry "prg:/var/www/html/.../wiki/entry_page.pl" apache:apache
    
    • 下記スクリプトを設置後、reload。restartの必要はない。(2.2.15, 2.4.33)
  • wiki/.htaccess
    RewriteEngine On
    RewriteRule ^$ ${wiki_entry:''} [NE,L]
    
    • Pattern「^$」は、.../wiki/のように、ディレクトリ名で終わるアクセスとマッチする。wiki/とwikiの両方にマッチする。別途書いているように、/wiki/ディレクトリ内に.haccessを置いたなら、Patternに「/wiki」や「wiki」と書かない。書くとマッチしない。頭は/で始まらないし、自分のディレクトリ名は含まれない。
    • ${prg}: prgという外部プログラムを実行してその戻り値(STDOUT)が${prg}の部分に置換(差替え)される。Using RewriteMap - Apache HTTP Server Version 2.4
    • プログラムには引数を渡す必要がある。空でもよい。ここでは空の''。
    • [NE]必須。今回の実際の飛び先(RewriteRuleのSubstitutionの内容)はPukiWikiページなので、NEがないと二重にURLエンコードされてしまう。転送先をベタに書く際、URLエンコードする前の文字列を書く必要があるが、それと同じ。
  • wiki/entry_page.pl
    #!/usr/bin/perl
    use strict;
    use warnings;
    $| = 1;
    use HTML::TreeBuilder::XPath;
    
    my $url = 'https://over.6pb.info/wiki/index.php?RecentChanges';
    
    while (<STDIN>) {
    	my $tree = HTML::TreeBuilder->new_from_url($url);
    	my $href = $tree->findvalue('//*[@id="body"]/ul/li[1]/a/@href');
    	print $href;
    	print "\n";
    }
    
    • Apacheのお供として常駐する。
    • メモリ使用量はWeb::ScraperでもHTML::TreeBuilder::XPathでも大差ないようだ。
      VSZRSS
      Web::Scraper + URI95,30822,660
      Web::Scraper + LWP::Simple97,6562.5%22,9441.3%
      HTML::TreeBuilder::XPath94,908-0.4%22,180-2.1%
      HTML::TreeBuilder::XPath + URI94,912-0.4%22,188-2.1%

アクセス制限 Edit

NET/www

短縮URL Edit

PukiWikiのページの内,ページ名が日本語のページ(全角文字をページ名に含むページ)のURLを人に紹介するのは若干はばかられる。長い意味不明のURLを伝えることになるから(FFなどでは一見長くないように見えるが,メールにコピペすれば驚く。)。各種URL短縮サービスを利用するのも一計だが,デメリットもある。他のやり方として,自分のサーバーのリダイレクト機能を利用する方法がある。但し,若干の注意が必要。

例えば,ページ

NET/日経新聞電子版

へ,

http://over.6pb.info/nikkei-wiki

でアクセスできるようにするには,.haccess等にUTF-8で

RewriteRule ^/nikkei-wiki /wiki/index.php?NET/日経新聞電子版 [R]

と記述する必要がある。UTF-8で書くのがキモ。URLエンコードした

RewriteRule ^/nikkei-wiki /wiki/index.php?NET/%E6%97%A5%E7%B5%8C%E6%96%B0%E8%81%9E%E9%9B%BB%E5%AD%90%E7%89%88 [R]

では期待通りに動かない。

アクセス記録が2つになる Edit

PukiWikiはページ名に/ (slash)を使うことで階層構造を表現できる。ページ名はそのままURLになっているので、URLにも/を含む。少し困ったことに、ページ名の/を、URLエンコードしたアクセス(/が%2Fに置き換えられている)と、していないアクセスが混在している。両者は最終的に表示されるページは同じであるものの、アクセス統計では(ソフトや設定次第だが)別々にカウントされる。URLが違うから。アクセス解析ソフトは、通常、一定の方針で「異なる」アクセスを同一視するので、PukiWikiの/も同一視すればよいだけだが、私の対応能力を超える。なお、PukiWikiのページ名を表す/を%2Fに置き換えるのは余計なことだ。インターネットの規格ではqueryの/をreserved purpose以外で使うときはURLエンコードする必要はない。


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-05-12 (土) 20:53:59 (65d)