人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

ApacheウェブサーバーのhtaccessでRewriteEngineを使用し、リダイレクトを行いたいと思っています。

以下のような連番(桁数は4桁固定)+英数ランダム文字列のフォルダ名があります。

test/0001abc012/
test/0002def345/
test/0003hij678/

連番のみ取り出し、以下のようにリダイレクトしたいです。

test/0001/
test/0002/
test/0003/

RewriteRuleをどのように記述すれば良いでしょうか?
もしくは、一度PHPなどで処理しなければならないのでしょうか?

お教えください。

●質問者: charque
●カテゴリ:ウェブ制作
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● ぱこち
●50ポイント

test ディレクトリに置くならこんな感じです。

RewriteEngine on
RewriteRule ^([0-9]{4})[0-9a-z]+/(.*) /test/$1/$2 [R,L]

うまくリダイレクトされなかったら、「/test/$1/」の部分を「http://サイトのドメイン/test/$1/」のように記述するとうまくいくかもしれません。


2 ● y-kawaz
●50ポイント

test/0001/ test/0002/ test/0003/ は実在していて、質問の言葉通り捉えるなら、

以下のような test/.htaccess を書けば良いと思います。

RewriteEngine on
RewriteRule ^([0-9]{4}) /test/$1/ [R,L]

ですが、test/0001/ test/0002/ test/0003/ は実在しないんだけど test/0001/ にアクセスされたら、実在する test/0001abc012/ を探して表示したいのだとするとプログラムが必要になります。

例えば test/search.php を以下のように作成して

<?php
$prefix = $_GET['prefix'];
if($prefix != '') {
 if($dir = opendir(".")) {
 $match = null;
 while(($file = readdir($dir)) !== false) {
 if(strpos($file, $prefix) === 0) {
 $match = $file;
 break;
 }
 }
 closedir($dir);
 if($match !== null) {
 header("Location: " . dirname($_SERVER['SCRIPT_NAME']) . "/$match");
 exit;
 }
 }
}

test/.htaccess を以下のように作成すれば

RewriteEngine on
RewriteRule ^([0-9]{4})/?$ search.php?prefix=$1 [L]

/test/0001/ にアクセスされたら test/0001abc012/ を探してリダイレクトしてくれるようには出来ます。

これが更にURLは test/0001/ のままで test/0001abc012/ の内容を表示したいとなると難しく、 RewriteMapというのを使えば可能ですが、この場合.htaccessではなくhttpd.confの設定+search.phpに代わる常駐プログラムが必要になります。


質問者さんが本当にやりたいのはどれれしょうか?

関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ