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

.htaccessによるリダイレクトについての質問です。

web_rootはファイルは何も無く、PCというディレクトリだけあります。

PCというディレクトリには色々ファイルや画像、サブディレクトリが入っていたりで、いわゆる通常のサイト構造になってます。

よろしくお願いします。
ここで、htaccessを使って、あたかもWEB_ROOTにあるようにしてサイトを運営していきたいのですが、どのような記述をすればいいのでしょうか?

wordpressのリダイレクトを参考に

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /PC/index.php [L]

上記にしてみましたが、できませんでした。

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

▽最新の回答へ

1 ● rouge_2008
●48ポイント ベストアンサー

web_rootがサイトのドキュメントルートなのでしたら、web_rootに次の.htaccessを設置します。

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /PC/$1 [L]


http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html
http://blog.dawgsdk.org/weblog/archives/411011
http://memorva.jp/memo/linux/mod_rewrite.php


※「RewriteRule . /PC/index.php [L]」は、「/PC/index.php」にリクエストを渡して処理を任せる場合の記述です。


【追記】※度々すみません。さらに修正済みです。

今回のケースでは、次の記述の方が適しているようです。

RewriteEngine On
RewriteBase /
# PCディレクトリへのリクエストを除外します。(リクエストされたURLのホスト以降の部分がPCディレクトリ以外で始まる場合にルールを適用)
RewriteCond %{REQUEST_URI} !^/?PC/
# または次のように書いても同じ条件になります。
RewriteCond $1 !^(PC)
# 次の条件も追記 ※PCディレクトリ内に存在しないファイルやディレクトリを要求された時に、リライト先のファイルが見つからないというNot Foundエラーが表示されるのを避ける為です。リライト先のファイルの存在確認を行ってから、存在する場合のみルールを適用します。
RewriteCond %{REQUEST_FILENAME} -F
RewriteRule ^(.*)$ /PC/$1 [L]


rouge_2008さんのコメント
次の記述は、ファイルが存在しない時、ディレクトリが存在しない時という条件です。 web_rootにPCフォルダ以外は何もないという事ですので、記述しない方がいいかもしれません。 条件チェックの分だけ負荷が掛かるかもしれませんので・・・ >|| RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d ||<

rouge_2008さんのコメント
上記の記述がないとエラーになってしまいます。 より適した記述を回答に追記しましたので、そちらを利用してください。 大変失礼しました。

ruijioさんのコメント
遅くなりましたが、回答ありがとうございます。 ちょと、試したところだめでした。またやってみて解決したら、こちらにコメント残します。

rouge_2008さんのコメント
すみません。 いきなりのトラブルでネット接続できない状態になったので、返信が遅くなりました。 上記の修正時に確認ミスがあった為、「RewriteCond %{REQUEST_FILENAME} -F」の記述が原因で存在するファイルの内容が返らない記述になっています。 大変申し訳ありません。 正しくは次のようになります。 >|| RewriteEngine On RewriteBase / # PCディレクトリへのリクエストを除外します。(リクエストされたURLのホスト以降の部分がPCディレクトリ以外で始まる場合にルールを適用) RewriteCond %{REQUEST_URI} !^/?PC/ # または次のように書いても同じ条件になります。 RewriteCond $1 !^(PC) # 次の条件も追記 ※PCディレクトリ内に存在しないファイルやディレクトリを要求された時に、リライト先のファイルが見つからないというNot Foundエラーが表示されるのを避ける為です。リライト先のファイルの存在確認を行ってから、存在する場合のみルールを適用します。 RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} -F RewriteRule ^(.*)$ /PC/$1 [L] ||< ※上記はドキュメントルート直下の場合の記述です。 もしサブディレクトリ内の場合は、次のようにしてみてください。 >|| RewriteEngine On RewriteBase /subdir # PCディレクトリへのリクエストを除外します。(リクエストされたURLのホスト以降の部分がPCディレクトリ以外で始まる場合にルールを適用) RewriteCond %{REQUEST_URI} !^/?subdir/PC/ # または次のように書いても同じ条件になります。 RewriteCond $1 !^(PC) # 次の条件も追記 ※PCディレクトリ内に存在しないファイルやディレクトリを要求された時に、リライト先のファイルが見つからないというNot Foundエラーが表示されるのを避ける為です。リライト先のファイルの存在確認を行ってから、存在する場合のみルールを適用します。 RewriteCond %{DOCUMENT_ROOT}/subdir/PC/$1 -F RewriteRule ^(.*)$ /subdir/PC/$1 [L] ||< ※上記はサブディレクトリ名が「subdir」の例です。ご自分の環境に合わせて変更してください。

rouge_2008さんのコメント
ドキュメントルートの方ですが、リライト先のファイルの存在確認でまだ間違いがありました。 次のように修正してください。大変失礼しました! >|| RewriteEngine On RewriteBase / # PCディレクトリへのリクエストを除外します。(リクエストされたURLのホスト以降の部分がPCディレクトリ以外で始まる場合にルールを適用) RewriteCond %{REQUEST_URI} !^/?PC/ # または次のように書いても同じ条件になります。 RewriteCond $1 !^(PC) # 次の条件も追記 ※PCディレクトリ内に存在しないファイルやディレクトリを要求された時に、リライト先のファイルが見つからないというNot Foundエラーが表示されるのを避ける為です。リライト先のファイルの存在確認を行ってから、存在する場合のみルールを適用します。 RewriteCond %{DOCUMENT_ROOT}/PC/$1 -F RewriteRule ^(.*)$ /PC/$1 [L] ||<

2 ● oil999
●42ポイント

以下の .htaccess を /web_root/ の直下に配置してみて下さい。

RewriteEngine On
RewriteBase /
RewriteRule ^(.*)$ /PC/$1 [L,R]

rouge_2008さんのコメント
『あたかもWEB_ROOTにあるようにしてサイトを運営していきたい』そうですので、Rフラグは必要ありませんね。

ruijioさんのコメント
回答ありがとうございます。 上記でもだめでした。また改めてトライして、解決したらこちらのコメントに残そうと思います。

3 ● taroe
●10ポイント

>『あたかもWEB_ROOTにあるようにしてサイトを運営していきたい』そうですので、Rフラグは必要ありませんね

http://urbangiraffe.com/plugins/redirection/

関連質問

●質問をもっと探す●



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