SyntaxHighlighter を使って Apache で公開している C# ソースコードに色を付けるメモ

1. やりたいこと

Apache により、ブラウザで C# ソースコードを見られるようにしているが、
ただのプレーンテキストとしての表示ではなく、

こんなふうに行番号と色付きで表示させたい。

2. 環境

2. ディレクトリ構成

  • C:\xampp\htdocs ←ドキュメントルート
    • \src ←このフォルダ下以降に C# ソースファイルを置く
      • \test
        • HelloWorld.cs ←対象の C# ソースファイルは UTF-8 で保存されているものとする
      • \syntaxhighlighter ←下記 3.1 で配置
      • src.php ←下記 3.2 で配置
      • .htaccess ←下記 3.3 で配置

3. 手順

3.1 SyntaxHighlighter の配置
  • http://alexgorbatchev.com/SyntaxHighlighter/
    の download から syntaxhighlighter_3.0.83.zip をダウンロード
  • zip を解凍し、フォルダ名を syntaxhighlighter として、 C:\xampp\htdocs\src 下に配置
    • C:\xampp\htdocs\src
      • \syntaxhighlighter
        • \scripts フォルダなど
3.2 src.php の配置
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">

<?php if(isset($_GET['src'])) $src = $_GET['src']; ?>

<head>
	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
	<title><?php if(isset($src)) print($src) ?></title>
	<script type="text/javascript" src="syntaxhighlighter/scripts/shCore.js"></script>
	<script type="text/javascript" src="syntaxhighlighter/scripts/shBrushCSharp.js"></script>
	<link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shCoreDefault.css"/>
	<script type="text/javascript">SyntaxHighlighter.all();</script>
</head>
<body style="background: white; font-family: 'MS ゴシック',sans-serif;">

<h1><?php if(isset($src)) print($src) ?></h1>

<script type="syntaxhighlighter" class="brush: csharp"><![CDATA[
<?php if(isset($src)) include($src); ?>
]]></script>

</html>
3.3 .htaccess の配置
  • Apache の modRewrite により、
    http://〜/src/HelloWorld.cs へのアクセスを、
    http://〜/src/src.php?src=HelloWorld.cs としてリダイレクトさせる。
  • これを行うための設定ファイル .htaccess を、 C:\xampp\htdocs\src 下に配置
  • .htaccess のコード
    • 下から3行目で、 URI の末尾が .cs で終わるリクエストを対象とする (かつ)
    • 下から2行目で、 URI のファイル名が、存在するファイルであることを確認する
    • 下から1行目で、 URI の書き換え(というかリダイレクト)を行う
      • [R,L] の R 指定により、/src/src.php へリダイレクトさせる
      • [R,L] の L 指定は、ここで書き換えルール適用を終了するの指定
Options FollowSymLinks
RewriteEngine on

RewriteCond %{REQUEST_URI} \.cs$
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^(.+\.cs)$ /src/src.php?src=$1 [R,L]

4. 確認

http://localhost/src/test/HelloWorld.cs

にアクセスすると、上記 1. の下の画像のように表示されました。

追記 2012/8/10

  • ToDo
    • 上記の「別の環境」で modRewrite が動かない原因を探り、動くようにする。
    • .htaccess による modRewrite の設定は処理が遅くなるそうな。 → mod_rewrite - @bayashi Wiki
      なので、 httpd.conf で設定して動くようにしてみる。

追記 2012/8/20

  • 上記の「別の環境」で modRewrite が動かなかった原因は以下の2つで、対応したら動くようになった。
    やはり、 認証がかかっています がとても参考になった。
    1. .htaccess が無効だった
      • httpd.conf を開いてみると、ドキュメントルートの 指定で、 AllowOverride None となっていた。
      • AllowOverride All に書き換えて Apache を再起動した。
    2. mod_rewrite モジュールが無効だった

*1:XAMPP を使わず、 ApachePHP を個別にインストールした Windows XP 環境。