前提・実現したいこと
【環境】
OS:Windows 10
XAMPP Version: 7.2.3 を使用。
(Apache 2.4.29、Perl v5.16.3)
http://example.com/日本語.html
(http://example.com/%E6%97%A5%E6%9C%AC%E8%AA%9E.html)
というURLにアクセスがあったときに、mod_rewriteで変換し、
http://example.com/core.cgi?page=日本語
(http://example.com/core.cgi?page=%E6%97%A5%E6%9C%AC%E8%AA%9E)
にリダイレクトし、画面上に「日本語」と出力したいと思っています。
※「日本語」は、実際はカッコ内記載の通りパーセントエンコードされた状態です
発生している問題・エラーメッセージ
「日本語」とは出力されず、以下の通り文字化けします。
a?\a?��ea?
なお、
http://example.com/?page=%E6%97%A5%E6%9C%AC%E8%AA%9E
でアクセスすると、以下の通り「日本語」と出力されます
日本語
また、http://example.com/abcd.html など、
2バイト文字でない場合は、問題は発生しません。
該当のソースコード
【.htaccess】
Apache
1DirectoryIndex core.cgi 2RewriteEngine on 3RewriteBase / 4RewriteRule ^([^/]+).html$ core.cgi?page=$1 [QSA,L,NE]
【core.cgi】
Perl
1#!/usr/bin/perl 2use utf8; 3use CGI; 4 5my $q = CGI->new(); 6 7print "Content-Type: text/html;charset=utf-8;\n"; 8print "Pragma: no-cache\n"; 9print "Cache-Control: no-cache\n\n"; 10 11print $q->param('page');
試したこと
Apacheのログを見ると、パターンマッチはうまく行っているように見えています。
[Fri Aug 17 22:18:43.600694 2018] [rewrite:trace3] [pid 15984:tid 1948] mod_rewrite.c(482): [client 127.0.0.1:52035] 127.0.0.1 - - [example.com/sid#4e2b988][rid#6e252e0/initial] [perdir D:/[...]/www/core/] strip per-dir prefix: D:/[...]/www/core/\xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e.html -> \xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e.html [Fri Aug 17 22:18:43.600694 2018] [rewrite:trace3] [pid 15984:tid 1948] mod_rewrite.c(482): [client 127.0.0.1:52035] 127.0.0.1 - - [example.com/sid#4e2b988][rid#6e252e0/initial] [perdir D:/[...]/www/core/] applying pattern '^([^/]+)\.html$' to uri '\xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e.html' [Fri Aug 17 22:18:43.600694 2018] [rewrite:trace2] [pid 15984:tid 1948] mod_rewrite.c(482): [client 127.0.0.1:52035] 127.0.0.1 - - [example.com/sid#4e2b988][rid#6e252e0/initial] [perdir D:/[...]/www/core/] rewrite '\xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e.html' -> 'core.cgi?page=\xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e' [Fri Aug 17 22:18:43.600694 2018] [rewrite:trace3] [pid 15984:tid 1948] mod_rewrite.c(482): [client 127.0.0.1:52035] 127.0.0.1 - - [example.com/sid#4e2b988][rid#6e252e0/initial] split uri=core.cgi?page=\xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e -> uri=core.cgi, args=page=\xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/08/27 14:56