リダイレクト・正規表現を使うと思います。
http://www.hoge.com/54343.html
のようなディレクトリ配下のhtmlへのアクセスを全て
http://www.hoge.com/index.php
に飛ばしたいと思います。
htmlのファイル名は全て数字です
その場合のmod_rewriteの書き方を教えてください。
Redirect permanent /(.*).html http://www.hoge.com/index.php
これではうまくいきませんでした。
また、できれば
http://www.hoge.com/sitemap.html
のみは
http://www.hoge.com/sitemap.php
に飛ばしたいです。
つまり、先ほどのリダイレクトは「数字.html」に限定させたいです。
どなたかよろしくお願いします。
RewriteEngine on RewriteRule sitemap.html sitemap.php [L] RewriteRule [0-9]+.html http://www.hoge.com/index.php [L]
ルールは上から順に比較され、
一番最初に当てはまった行に書かれているルールに従ってリダイレクトされます。
従って
RewriteEngine on RewriteRule sitemap.html sitemap.php [L] RewriteRule *.* http://www.hoge.com/index.php [L]
なんて事も・・・
RedirectMatch "\d+.html" http://www.hoge.com/index.php
RedirectPermanent /sitemap.html http://www.hoge.com/sitemap.php
参照したURL
http://httpd.apache.org/docs/2.0/ja/mod/mod_alias.html#redirectm...
は
RewriteRule \d+.html index.php [L]
のほうが短くてよかったですね。
ところで質問は
mod_rewrite(回答1)ですよね?
mod_alias(回答2)だったのでしょうか?
>RewriteRule \d+.html index.php [L]
この書き方は初めて見たのですが、まだうまくいっていません。500エラーになってしまいます。もうちょっと試行錯誤してみます。
>mod_rewrite(回答1)ですよね?
>mod_alias(回答2)だったのでしょうか?
mod_aliasは初めて聞く名前でした。ちょっと調べてみたところ、どちらもリダイレクトはできるようですが、GETで得たパラメータでURLマッピングする場合はmod_rewriteしかできないと解釈しました。
ですので、一応mod_rewriteの質問という事になります。
mod_rewriteや正規表現が苦手なのでまた質問させていただくかもしれません。よろしくお願い致します。
RewriteRule は mod_rewrite のディレクティブ。
質問文の冒頭でmod_rewriteと書いておられるのに
本文内ではRedirect permanentを使っておられるので
これは「どこかで話がごちゃごちゃになっているのではないか?」と思い、コメントしました。
以下、訂正です。
\d+ は誤りです。このような表現は使えません。
(permanentでは正規表現が使えますがRewriteRuleは[0-9]+ぐらいしか使えません。)
httpは外部へのリダイレクトの場合に使いますので今回は不要でした。
以上2点、お手数かけてスミマセンでした。
>Redirect permanent は mod_alias
>RewriteRule は mod_rewrite
確かに混同していました。混同というよりmod_aliasという言葉を知りませんでした。
サイト内のリンク構造が変わったときにRedirect permanentを使っていて、GET情報を静的URL化する際にRewriteRuleを使っています。同じhtaccess内に書いているので混同していました。すみませんでした。
何度もありがとうございます、おかげさまで勉強になりました。今後ともよろしくお願いします。