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

宜しくお願いします。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:--
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答4件)

id:ton-boo No.1

回答回数55ベストアンサー獲得回数5

ポイント18pt

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になると思います。

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

id:dak

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

2005/07/23 20:55:16
id:serian No.2

回答回数9ベストアンサー獲得回数0

ポイント18pt

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を使われてる方のブログ記事です。

id:dak

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

2005/07/24 00:44:13
id:ton-boo No.3

回答回数55ベストアンサー獲得回数5

ポイント17pt

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カ所です。念のため。


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

id:dak

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

2005/07/24 00:52:21
id:serian No.4

回答回数9ベストアンサー獲得回数0

ポイント17pt

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

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

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

id:dak

「.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に変換できるよう挿入しました。

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

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

2005/07/27 14:55:55

コメントはまだありません

この質問への反応(ブックマークコメント)

トラックバック

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません