-----------------------------------
.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
宜しくお願いします。
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になると思います。
一応、日本語の参考ページとしてこちらも。
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の罠」というのが該当するのかな?
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エラーが出るようです。回答有難うございます。
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に変換できるよう挿入しました。
-----------------------------------------
ご回答頂いた皆様、有難うございました。
ご指摘通り/を頭に入れてみた所、やはり404エラーが出てしまうようです。日本語の参考ページは役に立つかもしれません。有難うございます。