やりたいことは、シンプルに .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
htmlをphpに書き換えたいんですよね、逆じゃないですか?
RewriteRule ^(/?.+)\.html$ $1.php
$nで参照するには、()でグループ化して取得する必要があります。
RewriteRule ^/?(.+)\.php$ $1.html
※「RewriteBase /prg/shop/top」が必要な場合があります。
http://webtech.akijapan.com/htaccess/rewrite.phtml
$n (0 <= n <= 9) 後方参照。 n番目の( )内の値が入ります。
※.htaccessを置く位置に気をつけてください。(上記はtopフォルダ内に置く場合です。)
※他、何か疑問な点がある場合は、コメント欄を開けてくださるとやり取りしやすいです。
質問を勘違いしてしまいました。
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]
もう少しお待ちください。
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表示を書き替える
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]
調べていただいて感謝です。
確かに無限ループで苦しんでおりましたので
とても参考になりました。
現在、問題は解消しました。
また、質問の機会がありましたらどうぞよろしくお願いします。