mod_rewriteによるURLの書き換えがうまくいきません。

やりたいことは、シンプルに .php を .html に書き換えたいだけなのですが、
まったく無反応です。(他のmod_rewriteは動きます)
xxx.jp/prg/shop/top/p_index.php(実在するページ) -> p_index.html(実在しないページ) へブラウザのURL書き換え


以下コードです

.htaccess-->
Options FollowSymLinks
RewriteEngine on
RewriteRule ^.+\.php$ $1.html

実行結果-->
無反応

環境-->
CentOS Linux 5
独自サーバー
Apache2.2.3

回答の条件
  • 1人2回まで
  • 13歳以上
  • 登録:2011/05/16 07:48:02
  • 終了:2011/05/23 07:50:03

ベストアンサー

id:y-kawaz No.2

y-kawaz回答回数1420ベストアンサー獲得回数2252011/05/16 11:09:26

ポイント35pt

htmlをphpに書き換えたいんですよね、逆じゃないですか?

RewriteRule ^(/?.+)\.html$ $1.php
id:ebina01

ご指摘の通りでした。

発想が逆でした。

書き換え先が、実在するページでないとダメみたいでした。

ありがとうございました。

2011/05/16 11:24:50

その他の回答(1件)

id:rouge_2008 No.1

rouge_2008回答回数594ベストアンサー獲得回数3512011/05/16 09:03:37

ポイント35pt

$nで参照するには、()でグループ化して取得する必要があります。

RewriteRule ^/?(.+)\.php$ $1.html

※「RewriteBase /prg/shop/top」が必要な場合があります。


http://webtech.akijapan.com/htaccess/rewrite.phtml

$n (0 <= n <= 9) 後方参照。 n番目の( )内の値が入ります。


※.htaccessを置く位置に気をつけてください。(上記はtopフォルダ内に置く場合です。)

※他、何か疑問な点がある場合は、コメント欄を開けてくださるとやり取りしやすいです。

id:ebina01

アドバイスありがとうございます。

.htaccessの反応はあったのですが、架空のページにアクセスしようとして

404エラーが発生してしまいました。

File does not exist: /home/xxxxxx.jp/prg/shop/top/p_index.html

※コメントを受け付けるように設定しました。

質問が変わってしまった感もありますが、どうぞよろしくお願いします。

2011/05/16 09:23:18
id:y-kawaz No.2

y-kawaz回答回数1420ベストアンサー獲得回数2252011/05/16 11:09:26ここでベストアンサー

ポイント35pt

htmlをphpに書き換えたいんですよね、逆じゃないですか?

RewriteRule ^(/?.+)\.html$ $1.php
id:ebina01

ご指摘の通りでした。

発想が逆でした。

書き換え先が、実在するページでないとダメみたいでした。

ありがとうございました。

2011/05/16 11:24:50
  • id:rouge_2008
    すみません。
    質問を勘違いしてしまいました。
    xxx.jp/prg/shop/top/p_index.php(実在するページ)にアクセスがあった場合、 p_index.html(実在しないページ)にブラウザのURL表示を書き替えるのですか?
    以下で試してみてください。

    RewriteRule ^/?(.+)\.php$ $1.html [R,L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^/?(.+)\.html$ $1\.php [L]

  • id:rouge_2008
    まだ間違っていました。
    もう少しお待ちください。
  • id:ebina01
    はい。以下の通りとなります。
    phpのファイル名が表示されるのは、セキュリティー上よろしくないと思うゆえ、
    偽装したいと思っています。.html の部分を / にするのでもOKです。

    xxx.jp/prg/shop/top/p_index.php(実在するページ)にアクセスがあった場合、
    p_index.html(実在しないページ)にブラウザのURL表示を書きかえる

    または

    xxx.jp/prg/shop/top/p_index.php(実在するページ)にアクセスがあった場合、
    xxx.jp/prg/shop/top/p_index/にブラウザのURL表示を書き替える
  • id:rouge_2008
    すみません。お返事が遅くなりました。
    mod_rewriteだけでやろうとすると、無限ループになってしまうみたいです。
    http://okwave.jp/qa/q5824641.html
    上記のように、リダイレクトに関してはPHPファイルの方で行うのではダメでしょうか?

    if (!(isset($_GET['rewrited']) && $_GET['rewrited'])){
    $url = $_SERVER['REQUEST_URI'];
    $url = strtr($url, array("php" => "html"));

    header( "HTTP/1.1 301 Moved Permanently" );
    header( "Location: http://xxx.jp".$url );

    }

    上記を記述したファイルを各PHPファイルに読み込み、.htaccessには以下を記述します。

    RewriteRule ^/?(.+)\.html$ $1\.php?rewrited=1 [L]
  • id:ebina01
    rouge_2008様

    調べていただいて感謝です。
    確かに無限ループで苦しんでおりましたので
    とても参考になりました。

    現在、問題は解消しました。
    また、質問の機会がありましたらどうぞよろしくお願いします。

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

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

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

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません