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

mod_rewriteを用いて「http://www.hoge.jp/index.php?abc=XXXXXX」を「http://www.hoge.jp/abc/XXXXXX.html」に変換したいのですが、以下のように行うと404エラーとなります。考えられる原因を指摘して下さい。

-----------------------------------
.htaccess
-----------------------------------
DirectoryIndex index.php
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([0-9A-Za-z]+)/([0-9A-Za-z)]+)¥.html$ index.php?$1=$2 [L]
----------------------------------

サーバにはサクラインターネットのレンタルサーバ(スタンダード)を使用しています。また、以下のリソースを参考にして作業しています。

http://blog.su-jine.net/archives/2004/08/_mod_rewrite.html

宜しくお願いします。

●質問者: dak
●カテゴリ:コンピュータ
✍キーワード:.htaccess HTML INDEX mod_rewrite ON
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

1 ● ton-boo
●18ポイント

http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html

mod_rewrite - Apache HTTP Server

RewriteRule ^([0-9A-Za-z]+)/([0-9A-Za-z)]+)¥.html$ index.php?$1=$2 [L]

--

--

RewriteRule ^/([0-9A-Za-z]+)/([0-9A-Za-z)]+)¥.html$ /index.php?$1=$2 [L]

--

に変えてみてはいかがですか?

今の設定ではRewriteRuleにマッチせず、結果的にURLそのままでアクセスされてしまうため404になると思います。

http://tech.bayashi.net/svr/doc/apache/mod_rewrite.html

mod_rewrite

一応、日本語の参考ページとしてこちらも。

◎質問者からの返答

ご指摘通り/を頭に入れてみた所、やはり404エラーが出てしまうようです。日本語の参考ページは役に立つかもしれません。有難うございます。


2 ● serian
●18ポイント

http://sheepman.parfait.ne.jp/wiki/RewriteRule#content_1_1

urlは、mod_rewriteを使う上でのtipsみたいなページです。

以下、細かいことの確認です。

・¥.html$の¥が全角のようです。

・ルートにおく.htaccessでしょうか。httpd.confで、AllowOverrideの部分がNoneのままの可能性はどうでしょう。

http://dozo.rgr.jp/log/eid287.html

さくらインターネット - 格闘!!さくらインターネットとmod_rewriteでpukiwikiのSEO対策 | 海は海、風は風 dozo.rgr.jp

さくらでmod_rewriteを使われてる方のブログ記事です。

◎質問者からの返答

¥が全角なのは、はてなの変換です。httpd.conf..という話は、すいません、良く分からないのですが。。ブログの方はとても参考になりました。良く分からないのですが、「%2Fの罠」というのが該当するのかな?


3 ● ton-boo
●17ポイント

http://httpd.apache.org/docs/2.0/misc/rewriteguide.html

URL Rewriting Guide - Apache HTTP Server

無駄にポイントを消費させてしまうことにならなければ良いがと思いつつ、気になることを書きます。確実な回答以外は不要であるということなら今後自粛します。


で、この設定例では、正規表現の括弧が対応付いていないように思いました。先頭から2つ目の閉じ括弧”)”は不要ではないでしょうか?

最初、あっても害はないかと思っていましたが、mod_rewriteの正規表現の実装によっては問題かも知れません。ログを取ってみればはっきりすると思いますが、正規表現自体がエラーになってrewriteされない可能性があります。

--

RewriteRule ^([0-9A-Za-z]+)/([0-9A-Za-z)]+)¥.html$ index.php?$1=$2 [L]

--

--

RewriteRule ^/([0-9A-Za-z]+)/([0-9A-Za-z]+)¥.html$ /index.php?$1=$2 [L]

--

に直したらどうなりますか?

”¥”は(はてなが勝手に全角にしますが)半角、追加の”/”は2カ所です。念のため。


先の回答で私が紹介したページも含め、設定例として示されているページで今回のようになっているところも多いので、どうも不思議なのですが……。

◎質問者からの返答

「考えられる原因を指摘して下さい」という形で質問してますので、ちゃんと説明して頂ければ、確実でなくても構いません。)の対応は確かにおかしいですね。参照元としているサイトからコピーペーストしているので、他のサイトでも同様になっているのだと思います(理由があるのかどうかは分かりませんが)。ご指定のようにRewriteルールを書き換えて試してみましたが、やはり404エラーが出るようです。回答有難うございます。


4 ● serian
●17ポイント

http://warp.syns.net/2/3/index.html#allow

Apacheの設定

URLはhttpd.confの該当箇所についての説明のあるサイトです。

.htaccessをドキュメントルートに置く構成なんですよね。httpd.confファイルのデフォルトではここは、AllowOverride Noneなので、そのままでは.htaccessを置いても読みこまれませんよね。その書換ミスがあるのではないか、と思ったのです。

というのは、手元の環境では、AllowOverride Allにして、質問に書かれたrewriteの書式でうまくいったので。

◎質問者からの返答

「.htaccessをドキュメントルートに置く構成」なのかどうか、良く分かりませんが、どうやら現状、さくらインターネットではhttpd.confには対応していないようです(公式サイトには記述がありませんが、専用サーバのみ対応しているようです)。rewriteの書式はやはり間違いが無いのですね。回答有難うございます。なお、.htaccessをindex.phpと同じディレクトリに設置しています。

---

最終的に、何とか解決する事ができました。

http://get.daa.jp/blogn/seo_html.php#sakura_alias

上記URL記載のように、さくらインターネット固有の設定による問題だったようです。最終的に.htaccessは以下のようになりました。

-----------------------------------------

DirectoryIndex index.php

RewriteEngine on

RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^([0-9A-Za-z]+)/([0-9A-Z)]+)¥.html$ index¥.php?$1=$2 [L]

RewriteRule ^([0-9A-Za-z]+)/index¥.html$ index¥.php?$1 [L]

#正規表現の前に/を入れる必要は無かったようです。と、言うか、入れると404エラーになりました。

#rewriteルールの2つ目は、www.hoge.com/aa/index.htmlをwww.hoge.com/index.php?aaに変換できるよう挿入しました。

-----------------------------------------

ご回答頂いた皆様、有難うございました。

関連質問


●質問をもっと探す●



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