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

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2013/08/22 07:49:55
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:dawakaki No.3

回答回数797ベストアンサー獲得回数122

ポイント100pt

実際に存在しない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]
id:tenmillion

回答ありがとうございます。

頂いたソースでは404エラーがでましたが、 

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

ディレクトリの頭のスラッシュを取ったこの形にすることで、見事アクセスすることが出来ました。
ありがとうございます!!!!!

2013/08/22 07:48:27

その他の回答2件)

id:holoholobird No.1

回答回数574ベストアンサー獲得回数104

ポイント100pt

①の場合は
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]

と設定すればいいです。

他3件のコメントを見る
id: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 を追加する

以上を確認してみてください。

2013/08/18 11:50:20
id: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/ になることは成功していまうす。


この質問システムの規約上、お伺いしてよいのかどうか分かりませんが、
「仕事」としてご依頼することは可能でしょうか?直接連絡が取れる手段はありますか??

2013/08/19 10:17:31
id:fowling-piece No.2

回答回数37ベストアンサー獲得回数8

ポイント100pt

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

#LoadModule rewrite_module modules/mod_rewrite.so

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

LoadModule rewrite_module modules/mod_rewrite.so
他3件のコメントを見る
id:fowling-piece

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] 

というような感じになるのではないかと思いますがいかがでしょうか。

2013/08/19 22:06:26
id: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

これが希望です。

2013/08/20 09:37:22
id:tenmillion

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

最初の質問時、aaa.php を bbb.html に変換したいと書きましたが、

拡張子を変更できれば良いコトに気付きました。


現在アクセス出来るURL

http://hogehoge.com/shop/user_data/aaa.php


変換したいURL(実際には存在しない)

http://hogehoge.com/okikae/aaa.html


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

id:dawakaki No.3

回答回数797ベストアンサー獲得回数122ここでベストアンサー

ポイント100pt

実際に存在しない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]
id:tenmillion

回答ありがとうございます。

頂いたソースでは404エラーがでましたが、 

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

ディレクトリの頭のスラッシュを取ったこの形にすることで、見事アクセスすることが出来ました。
ありがとうございます!!!!!

2013/08/22 07:48:27
  • id:rouge_2008
    現在のURLと置き換えたいURL2つともに共通する部分がなく、ファイル名もそれぞれ「aaa.php」「bbb.html」「ccc.html」とそれぞれ違いますが、どのようなパターンになっているのでしょう?
    URL書き換えのルールに一定のパターンがないのでしたら、リダイレクト元は「.htaccess」設置ディレクトリからのパスを指定し、リダイレクト先には直接URLを指定するしかありません。
  • id:dawakaki
    現在のURL、置き換えたいURL①、置き換えたいURL②の3者に共通項がありません。
    代替案はありますが、残念ながら回答拒否されています。

    自動回答拒否で「一人以上」に設定していませんか? 自動回答拒否「利用する」を解除してみて下さい。
    解除方法は下記を見て下さい。
    http://q.hatena.ne.jp/help/mypage_config

    ベストアンサーが多い人の名前を回答拒否に入れている悪質ユーザーがいて(運営妨害してますね)、そのときに自動的に回答拒否されるみたいです。
  • id:tenmillion
    だわかき さま

    コメントありがとうございます。
    回答拒否を解除してみました。
  • id:dawakaki
    対応ありがとうございます。
    回答しました。

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

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

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

回答リクエストを送信したユーザーはいません