筆者について
FreeBSDを通じてOSSにささかな貢献を。
- 日本xrdpユーザ会発起人
- xrdp developer
- FreeBSD developer
OSS活動をご支援いただける方を募集しています
2014-07-02 tDiary の個別記事の URL を静的ページに見せかけたい
■ tDiary の個別記事の URI を静的ページに見せかけたい
タイトルの通りです。
tDiary はすべてのページを動的に生成し、/tdiary/?date=20140702 といったリクエスト URI でアクセスしますが、これを /tdiary/20140702.html という URI でアクセス出来るようにしたい。詳細な要件はこんな感じ。
- /tdiary/20140702.html という URI でアクセス出来るようにしたい
- 従来の URI /tdiary/?date=20140702 は /tdiary/20140702.html にリダイレクトしたい
tDiary-users wiki - htmlでアクセスしたいを参考に .htaccess に mod_rewrite の設定を行い、前者は実現出来るようになりました。 後者の設定は、一見リダイレクトがループするように見えますが以下の設定で実現できました。
tDiary の設置してあるディレクトリに .htaccess を置いてその中に設定を定義したため、VirtualHost ディレクティブの中に書く場合は細部のパスが異なります。
RewriteEngine On # YYYYMMDD.html でアクセスできるようにする RewriteRule ^([0-9]+)\.html$ index.rb?date=$1 [L] # /tdiary/?date=YYYYMMDD でアクセスしてきたら # YYYYMMDD.html にリダイレクトする RewriteCond %{REQUEST_URI} !index\.rb RewriteCond %{QUERY_STRING} date=([0-9]+) RewriteRule ^ /tdiary/%1.html? [R=307,L]
この設定だと /tdiary/index.rb?date=20140702 という URI できたアクセスはリダイレクトされずそのままになりますが、ループを回避するために致し方ないのと、アクセスログを見てもほとんどこの形式でのアクセスはないので目をつぶることに。
- ?date=YYYYMMDD → YYYYMMDD.html にリダイレクト (ブラウザの URI も変わる)
- YYYYMMDD.html → index.rb?date=YYYYMMDD に(内部的に)転送 (ブラウザの URI はそのまま)
- index.rb?date=YYYYMMDD → そのまま
こんなイメージで。ここの URI も http://w.vmeta.jp/tdiary/?date=20140702 にアクセスすると http://w.vmeta.jp/tdiary/20140702.html にリダイレクトされるようになっています。
ただ、思わぬ副作用があるかもしれないので現状は 307 で一時的にリダイレクト。しばらく運用してみて問題がなければ 301 に変更します。
2014/07/06 12:50 追記
案の定副作用があって、前n日分のリンクがうまく動いていなかったので下記のように修正しました。
$ git diff diff --git a/.htaccess b/.htaccess index 4b4670d..9a34848 100644 --- a/.htaccess +++ b/.htaccess @@ -21,10 +21,10 @@ DirectoryIndex index.rb RewriteEngine On # YYYYMMDD.html でアクセスできるようにする -RewriteRule ^([0-9]+)\.html$ index.rb?date=$1 [L] +RewriteRule ^([0-9]+-?[0-9]+)\.html$ index.rb?date=$1 [L] # /tdiary/?date=YYYYMMDD でアクセスしてきたら # YYYYMMDD.html にリダイレクトする RewriteCond %{REQUEST_URI} !index\.rb -RewriteCond %{QUERY_STRING} date=([0-9]+) +RewriteCond %{QUERY_STRING} date=([0-9]+-?[0-9]+) RewriteRule ^ /tdiary/%1.html? [R=307,L]