• ベストアンサー

mod_rewriteについて

いつもお世話になっております。 mod_rewriteを使ってURLの書き換えをしたいと思っております。 下記のようなファイルがあるとします。 http://www.domain.com/aaa/list.php http://www.domain.com/aaa/detail.php http://www.domain.com/bbb/list.php http://www.domain.com/bbb/detail.php PHPファイルはHTMLに書き換えています。 ---------------------------------------- RewriteEngine on # QUERY_STRING RewriteRule /([a-z]+)\/([a-z]+)\/([0-9]+)\.html$ /$1/$2.php?$3 [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule (.*)\.html$ /$1.php [L] ---------------------------------------- http://www.domain.com/aaa/detail/2.html http://www.domain.com/bbb/detail/2.html 上記どちらにアクセスしてもページが表示されませんと なってしまいます。 どうぞ、ご教授お願いいたします。 <環境> PHP:4.3.2 Apache:2.0.40 (Red Hat Linux)

  • PHP
  • 回答数2
  • ありがとう数3

質問者が選んだベストアンサー

  • ベストアンサー
  • Rayderl
  • ベストアンサー率83% (40/48)
回答No.1

こうしたら行きませんか。 RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^([a-z]+)/([a-z]+)/([0-9]+)\.html$ $1/$2.php?$3 [L]

wonder_dct
質問者

お礼

Rayderl さん、ご回答ありがとうございます。 ご指示いただいたものでできました。 ファイル名にアンダーバーが入っているものもありましたので 以下のルールでできました。 RewriteRule ^(.*)\/(.*)\/([0-9]+)\.html$ $1/$2.php?$3 [L] ありがとうございました。

その他の回答 (1)

  • php504
  • ベストアンサー率42% (926/2160)
回答No.2

自信はないですが RewriteRule ^/([a-z]+)\/([a-z]+)\/([0-9]+)\.html$ /$1/$2.php?$3 [L] か RewriteRule ([a-z]+)\/([a-z]+)\/([0-9]+)\.html$ $1/$2.php?$3 [L] を試してみては

wonder_dct
質問者

お礼

php504 さん、ご回答ありがとうございます。 ご指示いただいたルールでできました。 ありがとうございます。

関連するQ&A

  • mod_rewriteの書き方に困っています。

    http://www.○○○.com/1/2/3.htmlといった静的なリクエストを、 .htaccessを使って動的リクエストに読み替えています。 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^([^/]*)\.html$ index.php?a=$1&%{QUERY_STRING}[L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^([^/]*)/([^/]*)\.html$ index.php?a=$1&b=$2&%{QUERY_STRING}[L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^([^/]*)/([^/]*)/([^/]*)\.html$ index.php?a=$1&b=$2&c=$3&%{QUERY_STRING}[L] 違うのはディレクトリの階層(=引数の数)で、最大でa~eまで5つです。 ご覧のとおり、引数がいくつの場合でも、条件は同じなのです。 もっとスマートに書く方法があると思い、あれこれ試していますが、 自力ではうまくいかず、この形で運用しています。 技術向上のため、簡潔な書き方があれば知りたいです。 お気づきの書き方をご教示下さい。よろしくお願いします。 なお、php等を使ったスクリプトでの解析の提案ではなく、 .htaccessの記述方法としてのアドバイスをお願いします。

  • mod_rewriteの書き方について

    mod_rewriteの書き方について いつもお世話になっております。 mod_rewiteについて質問させていただきます。 複数の設定をしたいのですが、404のエラーが出てしまい思っている動作になりません。 -------------------------------------------------- RewriteEngine on (1) RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule hoge/(.*)\/(.*)\/(.*)\/(.*)\.html$ /hoge/$1/$2.php?$3=$4 [L] RewriteRule hoge/(.*)\/(.*)\/(.*)\/(.*)\/(.*)\/(.*)\.html$ /hoge/$1/$2.php?$3=$4&$5=$6 [L] (2) RewriteRule (.*)\.html$ /$1.php [L] -------------------------------------------------- 上記の設定を記載しております。 (1)はパラメーターがあった場合、URLの書き換えをしています。 ここはちゃんと動作しております。 (2)で、http://www.hoge.com/dir/index.html にアクセスした場合 /dir/index.php を呼び出すことに成功はしています。 ただ、http://www.hoge.com/dir/category.html にアクセスした場合 PHPファイルではなく、HTML(/dir/category.html)の場合404のエラーになってしまいます。 分かりづらい説明で申し訳ございませんが、ご教示よろしくお願いいたします。 [環境]  PHP:5.1.6  Linux:調べられません・・・わりと新しいバージョンです。

  • htaccess mod_rewriteのドット

    ワードプレスをインストールし.htaccessをのぞいてみると以下のようにあります。 RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] 一番下のRewriteRuleは%{REQUEST_FILENAME}がルートディレクトリ直下にあるファイルやディレクトリでなければ、RewriteRule . /index.php [L]を実行するという理解でいいでしょうか? それとRewriteRule . /index.php [L]のドットはどういう意味でしょうか? ドットは一文字ということだとおもいますが、では、mysite.co.jp/kはmysite.co.jp/indx.phpに修正される?ということでしょうか?現状では、mysite.co,jp以下に適当な文字列を入力してmysite.co.jp/dgfdhgfghfdhなどとしてもそのURLのままサイトが表示されてしまいます。記事の部分は404NotFoundなのですが。。 情報はあるのですが、調べても混乱してしまうのでご存知でしたらよろしくお願いいたします。 Apache wordpress

    • 締切済み
    • PHP
  • 動的ページを静的ページの変換

    動的ページを静的ページの変換で http://www.yyyyy.com/aaa/bbb/xxx.php?word=xxx&ger=1234&sort=xxxx を http://www.yyyyy.com/aaa/bbb/xxx.php/xxx/1234/xxxx.html としたいのですが、、うまくいきません。 DirectoryIndex xxx.php RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^([0-9A-Za-z]+)/([0-9]+)/([0-9A-Za-z]+)\.html$ xxx.php?word=$1&ger=$2&sot=$3 [L] と RewriteEngine on RewriteRule ^([0-9A-Za-z]+)/([0-9]+)/([0-9A-Za-z]+)\.html$ xxx.php?word=$1&ger=$2&sot=$3 [L] で試しました。 サーバーはxreaです。 よろしくおねがいいたします。

    • 締切済み
    • PHP
  • mod_rewriteに適用したくないファイルがある場合は?

    RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^([0-9A-Za-z_)]+)\.htm$ http://www.****.com/$1.php [L] ↑のようにhtaccessでphpをhtmに見せているんですが、 1.フォルダ内のphpファイルでも一部にこれを適用したくない場合はどのように書けばいいのでしょうか? 2.この.htaccessファイルがある下層のフォルダにはmod_rewriteを適用したくない場合はどのように書けばいいのでしょうか? (.htaccessの効果って下層フォルダにも効いてしまいますよね?) どちらかだけでもいいので、分かる方いらっしゃれば手助けしていただければうれしいです。 よろしくお願いいたします。

    • ベストアンサー
    • HTML
  • mod_rewriteで静的化(PHP)

    ご質問です。 例えば以下のような静的なページをmod_rewriteを使って.htaccessで作成しようとしています。 RewriteRuleの記述内容がよくわからず困っています。 また、.htaccessは、どのディレクトリに配置すればよいでしょうか。 どなたかご存知でしたら教えて下さい。 http://localhost/free/index.php?action=member →http://localhost/free/member http://localhost/free/index.php?action=bbs →http://localhost/free/bbs http://localhost/free/index.php?action=usr →http://localhost/free/usr このような記述をしていますが、ご指摘お願いします。 ---------------------- DirectoryIndex index.php RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^([0-9A-Za-z)]+)$ index.php?action=$1 [L] ---------------------- 宜しくお願いします。

    • 締切済み
    • PHP
  • mod_writeの書き方を教えて下さい。

    mod_writeの書き方を教えて下さい。 http://www.domain.com/aaa/bbb で静的アドレスでアクセスしたいです。 aaaディレクトリにindex.phpを置いています。 しかしやり方がわかりません。できますでしょうか。 RewriteRule ^aaa/(.*)$ /aaa/index.php?id=$1 [L] 上記でinternal serverエラーになります。 http://www.domain.com/aaa/bbb.html のように.htmlを付けたくないのです。 RewriteRule ^aaa/(.*).html$ /aaa/index.php?id=$1 [L] 上だとうまくいきます。 お願いします。本当に困っています。

  • mod_rewrite について

    mod_rewrite について お世話になります。php初心者です。 URLのリライトを行いたくて色々調べてみたのですが問題が解消できず質問させて頂きます。 (サブドメインを使用しています) htaccessに下記のように記述しました。 RewriteEngine On RewriteCond %{HTTP_HOST} ^(www\.test\.aaa\.ne\.jp)(:80)? [NC] RewriteRule ^(.*)$ http://test.aaa.ne.jp/$1 [R=301,L] すると、 「http://www.test.aaa.ne.jp」 は、 「http://test.cns.ne.jp」 とならずにエラー画面が表示されます。(エラーコード404) URLの表示方法を換えたいと考えております。 (●●●できたら×××と表示する) それともそもそもの私の捉え方が間違っているのでしょうか。 サブドメインを使用しているからでしょうか。 ご教授頂けると大変ありがたいです。 宜しくお願い申し上げます。

    • 締切済み
    • PHP
  • mod_rewriteの変換について

    こんにちは。 現在、業務でmod_rewriteの設定をしているのですが、こまっています。 やりたい事は http://localhost/hoge/aaa/bbb/ のアクセスがきた時に http://localhost/hoge/?action_aaa_bbb_index=true の内容を表示したいです。 但し、URLは http://localhost/hoge/aaa/bbb/ という感じです。 他のサイトで調べて、設定をしたのですがどうしても http://localhost/hoge/aaa/bbb/ アクセスすると http://localhost/hoge/以下のディレクトリィが表示されてしまいます。 また最後のオプションを[R]にすると表示はされますが http://localhost/hoge/?action_aaa_bbb_index=true にURLが書き換わってしまいます。 (これは当然なので、認識しています。) 以下、設定を記述します。 よろしくお願いします。 ■環境 windows XP apache2.2 ■記述箇所 httpd.conf --------設定内容--------- RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^/hoge/([0-9A-Za-z]+)/([0-9A-Za-z]+)/?$ /hoge/?action_$1_$2_index=true [L] AllowEncodedSlashes On

  • httpからhttpsへのリダイレクト方法

    すいません、よくわかりませんので教えて下さい。.htaccessに記述してhttpにアクセス来たものをhttpsへリダイレクトしたいです。 今の状況は下記です。 AddHandler application/x-httpd-php53 .php RewriteEngine On # Main RewriteRule for multidomain. RewriteCond %{HTTP_HOST} ^(sanetsu.com) RewriteCond %{REQUEST_URI} !^/(sanetsu.com)/ RewriteRule ^(.*)$ http://www.sanetsu.com/$1 [L] # Main RewriteRule for multidomain. RewriteCond %{HTTP_HOST} ^(www.burikama.com) RewriteCond %{REQUEST_URI} !^/(www.burikama.com)/ RewriteRule ^(.*)$ /%{HTTP_HOST}/$1/ [L] # Main RewriteRule for multidomain. RewriteCond %{HTTP_HOST} ^(burikama.com) RewriteCond %{REQUEST_URI} !^/(burikama.com)/ RewriteRule ^(.*)$ http://www.burikama.com/$1 [L] # BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule> # END WordPress すいません、上記の記述をどのように変更したらhttpsへリダイレクトさせることができますでしょうか?前任のweb担当の方と連絡が付かないので教えていただけたらありがたいです。 宜しくお願い致します。

    • ベストアンサー
    • HTML

専門家に質問してみよう