以下のような連番(桁数は4桁固定)+英数ランダム文字列のフォルダ名があります。
test/0001abc012/
test/0002def345/
test/0003hij678/
連番のみ取り出し、以下のようにリダイレクトしたいです。
test/0001/
test/0002/
test/0003/
RewriteRuleをどのように記述すれば良いでしょうか?
もしくは、一度PHPなどで処理しなければならないのでしょうか?
お教えください。
test ディレクトリに置くならこんな感じです。
RewriteEngine on RewriteRule ^([0-9]{4})[0-9a-z]+/(.*) /test/$1/$2 [R,L]
うまくリダイレクトされなかったら、「/test/$1/」の部分を「http://サイトのドメイン/test/$1/」のように記述するとうまくいくかもしれません。
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件)