人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

mod_rewriteによるURL書き換え

下記のようなパターンでURLを書き換えたいのですが可能でしょうか?
可能であれば、htaccessファイルへの記述方法を教えて下さい。

※Apacheバージョン 2.2.22 です。


現在のURL
http://hogehoge.com/shop/user_data/aaa.php


置き換えたいURL?
http://hogehoge.com/okikae/bbb.html

置き換えたいURL?
http://hogehoge.com/ccc.html

●質問者: tenmillion
●カテゴリ:ウェブ制作
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● holoholobird
●100ポイント

?の場合は
RewriteEngine on
RewriteRule ^/okikae/bbb\.html$ /shop/user_data/aaa.php [R=301,L]

?の場合は
RewriteEngine on
RewriteRule ^/ccc\.html$ /shop/user_data/aaa.php [R=301,L]

となります。



----
追記です。
もしも、http://hogehoge.com/aaa.htmlにアクセスしたときに
http://hogehoge.com/shop/user_data/aaa.phpの内容をさせたいのであれば、

?の場合は
RewriteEngine on
RewriteRule ^/okikae/(.*)\.html$ /shop/user_data/$1.php [R=301,L]

?の場合は
RewriteEngine on
RewriteRule ^/(.*)\.html$ /shop/user_data/$1.php [R=301,L]

と設定すればいいです。


tenmillionさんのコメント
回答ありがとうございます。 しかし、やってみたけど、うまく動きませんでした(涙 ※追記の方法もだめでした。。。 今回やりたいことは、まさに追記で書いていただいた内容です。 何か修正ポイントはありますでしょうか??

holoholobirdさんのコメント
うまく動かない原因の一つとしてはhtaccessの場所が考えられます。 .htaccessはルートディレクトリにありますか? ルートディレクトリに.htaccessを作成して、 --- RewriteEngine on RewriteRule ^/(.*)\.html$ /shop/user_data/$1.php [R=301,L] --- とだけ記載してみてください。 http://www.hoge.com/aaa.htmlにアクセスすると、 http://www.hoge.com/shop/user_data/aaa.phpが表示されます。 ……ルートディレクトリというのは、aaa.phpが置いてあるuser_dataディレクトリの上のshopディレクトリの上のディレクトリの事です。

tenmillionさんのコメント
たびたびありがとうございます。 htaccessの場所はルートです。 上記記述でアップしてみると、404エラーが出ます。

holoholobirdさんのコメント
そうなるともうhttpd.confが原因としか考えられません。 httpdの.htaccessの読み込み設定が許可されていないか、もしくはhttpdのrewriteモジュール自体が起動していないので、rewriteruleが有効になっていないと思われます。 httpd.confは設定可能でしょうか。 ・.htaccessを読み込むためのallowoverride none を allowoverride all に書き換える ・モジュールを読み込むためのLoadModule rewrite_module modules/mod_rewrite.so を追加する ・リライトモジュール追加のためにAddModule mod_rewrite.c を追加する 以上を確認してみてください。

tenmillionさんのコメント
サーバー環境を全開示できないので、回答いただく際もお手間を取らせてしまいますね。 ・htaccessの読み込みは可能です。www統一などで有効な事を確認しています。 ・phpinfoの出力から、「Loaded Modules」欄に、「mod_rewrite」が表示されていることを確認しています。 ・「AddModule mod_rewrite.c」のことなのか分かりませんが、 <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule dir1/(.*) dir2/$1 [R,L] </IfModule> この記述で、hogehoge.com/dir1/ へのアクセスが hogehoge.com/dir2/ になることは成功していまうす。 この質問システムの規約上、お伺いしてよいのかどうか分かりませんが、 「仕事」としてご依頼することは可能でしょうか?直接連絡が取れる手段はありますか??

2 ● SPANIEL
●100ポイント

ご自分で導入された Apache でしょうか。
httpd.conf で mod_rewrite の文字を探してください。
mod_rewrite はデフォルトでコメントアウトされています。

#LoadModule rewrite_module modules/mod_rewrite.so

行頭の#を削除して保存し、Apache を再起動すると RewriteEngine が有効になります。

LoadModule rewrite_module modules/mod_rewrite.so

tenmillionさんのコメント
回答ありがとうございます。 サーバーはkagoya、専用サーバーです。 phpinfo の出力結果をみてみると、「Loaded Modules」として、「mod_rewrite」が表示されています。 また、簡単なテスト、たとえば、 hogehoge.com/dir1/ hogehoge.com/dir2/ を作り、dir1にアクセスされたらdir2が表示されるようなプログラムです。 記述的には以下のように書きました。 <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule dir1/(.*) dir2/$1 [R,L] </IfModule> こうした状況から、RewriteEngineは有効状態と認識しています。 このテストはどちらも存在するディレクトリですが、今回質問されていただいたパターンは、変換前のURLは存在しますが、変換後のURLは存在しません。 その辺がネックになっているのかな?と個人的に考えながら、試行錯誤しています。

SPANIELさんのコメント
>> このテストはどちらも存在するディレクトリですが、今回質問されていただいたパターンは、変換前のURLは存在しますが、変換後のURLは存在しません。 << []http://hogehoge.com/shop/user_data/aaa.php[] という URL は有効で、それを rewrite で書き換えて []http://hogehoge.com/okikae/bbb.html[] という無効な URL にするということでしょうか。 であれば404なステータスになるのは正しい動作だと思うのですが。 よくあるパーマリンク形式をやりたくて静的なURLでアクセスされたときにPHPを呼び出すURLに変更したいのかと思っていました。

tenmillionさんのコメント
WordPressのパーマリンクのようにイメージしています。 mod_rewrite を使うことで、 存在しないURLでのアクセスが可能になると解釈していますが、 もしかして、この認識が誤っているってことですかね?

SPANIELさんのコメント
>> WordPressのパーマリンクのようにイメージしています。 << ということでしたら書き換えの方向を勘違いなされているのではないかと思います。 >|| RewriteRule アクセスしてくるURL 実際に有効なURL オプション ||< という形式になりますから RewriteRule の次が存在していなくてもOKなURLで、その次が有効なURLになっている必要があります。 例えば []http://hogehoge.com/okikae/bbb.html[] のURLでアクセスされるとした場合、「bbb」が aaa.php のパラメータになっているはずです。 >|| RewriteRule ^/okikae/(.*)\.html$ /shop/user_data/aaa.php?parameter=$1 [R=301,L] ||< というような感じになるのではないかと思いますがいかがでしょうか。

tenmillionさんのコメント
回答ありがとうございます。 頂いたソースも 404エラーとなりました。 http://hogehoge.com/shop/user_data/aaa.php の最後の「aaa」の部分は任意で設定出来ます。 変換後のURLを http://hogehoge.com/okikae/bbb.html と記載していましたが、 http://hogehoge.com/okikae/aaa.html と変換できれば、やりたい事は達成です。 実際にアクセス出来るURL http://hogehoge.com/shop/user_data/aaa.php 上記URLを下記URLでアクセス可能にしたい http://hogehoge.com/okikae/aaa.html これが希望です。

質問者から

質問が適切でなかったようです。

最初の質問時、aaa.php を bbb.html に変換したいと書きましたが、
拡張子を変更できれば良いコトに気付きました。


現在アクセス出来るURL
http://hogehoge.com/shop/user_data/aaa.php


変換したいURL(実際には存在しない)
http://hogehoge.com/okikae/aaa.html


この形を希望しています。


3 ● だわかき
●100ポイント ベストアンサー

実際に存在しないhttp://hogehoge.com/okikae/aaa.htmlをブラウザのURLに表示させたいという質問ですが、これはmod_rewriteによるURL置換ではないのでできません。

また、サーバやブラウザで実際に存在しないURLを表示することもできません。
悪意のある人が、なりすましサイトを作れてしまうからです。

http://hogehoge.com/okikae/aaa.htmlがリクエストしたらhttp://hogehoge.com/shop/user_data/aaa.phpにリダイレクトし、URLはhttp://hogehoge.com/okikae/aaa.htmlのままということであれば、下記の指定でできます。

RewriteEngine on
RewriteRule ^/okikae/abc/(.+)\.html /shop/user_data/$1.php [L]

tenmillionさんのコメント
回答ありがとうございます。 頂いたソースでは404エラーがでましたが、 RewriteEngine on RewriteRule ^okikae/(.*)\.html$ shop/user_data/$1.php [L] ディレクトリの頭のスラッシュを取ったこの形にすることで、見事アクセスすることが出来ました。 ありがとうございます!!!!!
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ