アプリ版:「スタンプのみでお礼する」機能のリリースについて

拡張子なしのファイルを拡張子付きのファイルに関連付けるための質問です。

以下のようにhtaccessを設定すると「abc10.txt」以降はすべて「abc1.txt」にリダイレクトしてしまいます。
ファイル名の数字は9までしか認識しないようです。
例えばリダイレクト先のファイル名を「abc10.txt」に指定すると1術しか認識せず「abc1.txt」を表示してしまいます。
「abc11.txt」も「abc12.txt」も同じく「abc1.txt」を表示してしまいます。

例1
http://sample.com/abc9 (拡張子なしのファイル指定)
表示:abc9.txt
abc1.txt ~ abc9.txtは正しく表示される。

例2
http://sample.com/abc12 (拡張子なしのファイル指定)
表示:abc1.txt
abc10.txt ~ abc12.txtはすべてabc1.txtが表示される。


RewriteEngine on
RewriteRule ^abc1 abc1.txt
RewriteRule ^abc2 abc2.txt
RewriteRule ^abc3 abc3.txt
RewriteRule ^abc4 abc4.txt
RewriteRule ^abc5 abc5.txt
RewriteRule ^abc6 abc6.txt
RewriteRule ^abc7 abc7.txt
RewriteRule ^abc8 abc8.txt
RewriteRule ^abc9 abc9.txt
RewriteRule ^abc10 abc10.txt
RewriteRule ^abc11 abc11.txt
RewriteRule ^abc12 abc12.txt


abc9.txt以降のファイル「 abc10.txt」「 abc11.txt」「 abc12.txt」を正しく表示させる方法はないでしょうか?
.htaccessで9以降の数字を認識させるオプションコマンドなどがあれば楽なのですが。

A 回答 (1件)

正規表現を勉強されると良いかと思います。



次のようにすると良いです。
RewriteRule ^abc1$ abc1.txt

^ は正規表現で頭にマッチするという意味です。
つまりは ^abc は abcから始まる文字列にマッチしろということですね。
これとは別に末尾にマッチする $ という正規表現があります。
abc $ であれば abcで終わる文字列にマッチするということです。
これを組み合わせて ^abc$ とすると abc で始まり abc で終わる文字列にマッチする。
つまりは abc のみを含む文字列にマッチするということになります。

正規表現は便利で、上のように全てのファイル名を書かなくとも次のように簡単に書くことができます。

RewriteEngine on
RewriteRule ^abc([0-9]{1,2})$ abc$1.txt

これは abc** というファイルの ** の部分が 0~99の場合です。

0~12 のようにしたい場合は次のようになります。

RewriteEngine on
RewriteRule ^abc([0-9]|1[0-2])$ abc$1.txt

正規表現を勉強するといろいろと便利なので余裕があるなら勉強すると良いですよ。
    • good
    • 0
この回答へのお礼

詳しくご説明いただいて、ありがとうございます。
語尾に$を付けることで解決いたしました。
記入を簡単にできるのは便利ですね。もっと正規表現を勉強します。

サーバー移転後にログを見ると拡張子がないファイルが404エラーを吐きまくっていたので対策に困っていました。以前のサーバーでは特に何もしなくても拡張なしファイルが表示されていました。
何かのミスでURLに拡張子を記入し忘れたのですが、サーバーが賢くてそのまま運用されていました。

.htaccessの記入は初めてだったのですが色々勉強になりました。
もっと勉強すれば色々な事に応用できそうですね。

お礼日時:2009/07/12 12:24

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!