ページ更新: 2010-03-21 (日) (4818日前)
サーバ管理やPukiwiki修正の記録。 [編集]2010-03-20 #[編集]Apache 1.3.x, mod_rewrite, RewriteRule で % をurlencodeさせないようにする #PukiWikiのページ名「ソフト/Bug Tracking/trac/未整理2006」を「ソフト/Bug Tracking/trac/2006」に変更したので、 旧URLへのアクセスを新URLにリダイレクトするルールを追加。同様に「未整理2007」「未整理2008」も。 こういうのを (「ソフト/Bug Tracking/trac/未整理2006」): http://discypus.jp/wiki/?%A5%BD%A5%D5%A5%C8%2FBug%20Tracking%2Ftrac%2F%CC%A4%C0%B0%CD%FD2006 こちらにリダイレクトしたい (「ソフト/Bug Tracking/trac/2006」): http://discypus.jp/wiki/?%A5%BD%A5%D5%A5%C8%2FBug%20Tracking%2Ftrac%2F2006 で、RewriteRule で % が %25 に置き換えられてしまうので、それを防ぐために、こんなのをRewriteMapで使った: /usr/local/bin/escape.pl #!/usr/bin/perl select STDOUT; $| = 1; while (<>) { $_ =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack('H2', $1)/eg; print; } $| = 0; 参考にしたのはこちらの情報: httpd.conf の変更点はこんなの: $ sudo hg diff -U0 /etc/apache/httpd.conf diff -r de102f467da2 apache/httpd.conf --- a/apache/httpd.conf Sun Mar 21 02:00:50 2010 +0900 +++ b/apache/httpd.conf Sun Mar 21 20:27:58 2010 +0900 @@ -1181,1 +1177,2 @@ - <IfModule mod_rewrite.c> + RewriteMap escape prg:/usr/local/bin/escape.pl + @@ -1183,1 +1180,1 @@ - RewriteRule ^/wiki/$ "/wiki/?%A5%BD%A5%D5%A5%C8%2FBug%20Tracking" [R=301,L] + RewriteRule ^/wiki/$ "/wiki/?${escape:%A5%BD%A5%D5%A5%C8}/Bug Tracking" [R=301,L] @@ -1186,1 +1183,1 @@ - RewriteRule ^/wiki/$ "/wiki/?%A5%BD%A5%D5%A5%C8%2FBug%20Tracking%2Ftrac" [R=301,L] + RewriteRule ^/wiki/$ "/wiki/?${escape:%A5%BD%A5%D5%A5%C8}/Bug Tracking/trac" [R=301,L] @@ -1189,1 +1186,1 @@ - RewriteRule ^/wiki/$ "/wiki/?%A5%BD%A5%D5%A5%C8%2FBug%20Tracking%2Ftrac" [R=301,L] + RewriteRule ^/wiki/$ "/wiki/?${escape:%A5%BD%A5%D5%A5%C8}/Bug Tracking/trac" [R=301,L] @@ -1191,0 +1188,8 @@ + RewriteCond %{QUERY_STRING} ^%A5%BD%A5%D5%A5%C8%2FBug%20Tracking%2Ftrac%2F%CC%A4%C0%B0%CD%FD2006$ + RewriteRule ^/wiki/$ "/wiki/?${escape:%A5%BD%A5%D5%A5%C8}/Bug Tracking/trac/2006" [R=301,L] + + RewriteCond %{QUERY_STRING} ^%A5%BD%A5%D5%A5%C8%2FBug%20Tracking%2Ftrac%2F%CC%A4%C0%B0%CD%FD2007$ + RewriteRule ^/wiki/$ "/wiki/?${escape:%A5%BD%A5%D5%A5%C8}/Bug Tracking/trac/2007" [R=301,L] + + RewriteCond %{QUERY_STRING} ^%A5%BD%A5%D5%A5%C8%2FBug%20Tracking%2Ftrac%2F%CC%A4%C0%B0%CD%FD2008$ + RewriteRule ^/wiki/$ "/wiki/?${escape:%A5%BD%A5%D5%A5%C8}/Bug Tracking/trac/2008" [R=301,L] もしかしたら、httpd.conf で%を使わずに、EUC-JPで書き込んでも動くかも知れないけど。 |