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


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

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

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

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

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

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

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

ベストアンサー

id:rouge_2008 No.1

回答回数595ベストアンサー獲得回数351

ポイント48pt

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]

他3件のコメントを見る
id: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」の例です。ご自分の環境に合わせて変更してください。

2012/12/19 12:06:25
id: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]
2012/12/20 02:21:35

その他の回答2件)

id:rouge_2008 No.1

回答回数595ベストアンサー獲得回数351ここでベストアンサー

ポイント48pt

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]

他3件のコメントを見る
id: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」の例です。ご自分の環境に合わせて変更してください。

2012/12/19 12:06:25
id: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]
2012/12/20 02:21:35
id:oil999 No.2

回答回数1728ベストアンサー獲得回数320

ポイント42pt

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

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

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

2012/12/11 19:51:28
id:ruijio

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

上記でもだめでした。また改めてトライして、解決したらこちらのコメントに残そうと思います。

2012/12/16 17:24:44
id:taroe No.3

回答回数1099ベストアンサー獲得回数132

ポイント10pt

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

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

コメントはまだありません

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

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

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

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