.htaccessでURLの内容を変更する方法

このQ&Aのポイント
  • URLをそのまま保ちつつ、指定のディレクトリ以下のファイルを表示するための.htaccessの書き方について説明します。
  • いくつかの試みをしたもののうまく動作しない場合、設定に問題がある可能性があります。以下の方法を試してみてください。
  • RewriteRuleを使用して指定のディレクトリ以下のファイルを表示するようにリダイレクトする方法について説明します。
回答を見る
  • ベストアンサー

.htaccessの書き方について

http://www.example.com/abc/ の場合 URLはそのままで、内容は /main/abc/以下 (の同名ファイル)を表示したい場合、 .htaccess に以下のように色々試したのですが、うまく動作しません。 どこがいけないでしょうか。 ----- RewriteBase / RewriteRule ^/(.*)/$ /main/$1/ ----- ----- RewriteBase / RewriteRule ^(.*)$ /main/$1 [L] ----- ----- RewriteBase / RewriteRule ^/(.*)/(.*)$ /main/$1/$2 -----

質問者が選んだベストアンサー

  • ベストアンサー
  • t_ohta
  • ベストアンサー率38% (5080/13275)
回答No.4

> RewriteRule ^([^img^css].*)/(.*)$ /main/$1/$2 では無く RewriteBase / RewriteRule ^main/.* - [L] RewriteRule ^img/.* - [L] RewriteRule ^css/.* - [L] RewriteRule ^(.*)/(.*)$ /main/$1/$2 とした方が見やすく、何がしたいのか判断しやすい設定だと思います。 > http://www.example.com/main/abc/ の場合 > URLは http://www.example.com/abc/ になり、内容は/main/abc/を表示することって可能でしょうか? RewriteRuleが無限ループになってしまうので難しいでしょう。 もしやりたいのであれば、Aliasとmod_rewriteの組み合わせで処理させるのが良いのではないでしょうか。

genuine2010
質問者

お礼

ありがとうございます。 mod_rewriteでは無理ですかね。 もう少しいろいろ試してみようとおもいます。 この度は、丁寧に教えていただいてありがとうございました。

その他の回答 (3)

  • t_ohta
  • ベストアンサー率38% (5080/13275)
回答No.3

> ただ、 > http://www.example.com/aaa.html > などは、そのまま表示したいのですが、可能でしょうか? 私の環境では、ルートディレクトリにあるHTMLファイルはそのまま表示できていますよ。

genuine2010
質問者

お礼

ありがとうございます。 http://www.example.com/img/~とhttp://www.example.com/css/~を読み込んでいないだけで、以下にすると表示できました。 RewriteBase / RewriteRule ^main/.* - [L] RewriteRule ^([^img^css].*)/(.*)$ /main/$1/$2 ちなみにですが、上記をした上で、 http://www.example.com/main/abc/ の場合 URLは http://www.example.com/abc/ になり、内容は/main/abc/を表示することって可能でしょうか?

  • t_ohta
  • ベストアンサー率38% (5080/13275)
回答No.2

これでどうでしょうか RewriteBase / RewriteRule ^main/.* - [L] RewriteRule ^(.*)/(.*)$ /main/$1/$2

genuine2010
質問者

お礼

ありがとうございます! できました! ただ、 http://www.example.com/aaa.html などは、そのまま表示したいのですが、可能でしょうか?

回答No.1

これだけでは動きません。 コピペで申し訳ありませんが・・・これを参考にしてみてください。 RewriteCond %{REQUEST_URI} !^/(attach|cache|image|skin) RewriteRule ^\?(.*)$ /index.cgi?$1 [L] RewriteCond %{REQUEST_URI} !^/(attach|cache|image|skin) RewriteRule ^(.+)/$ /index.cgi/$1 [L] RewriteCond %{REQUEST_URI} !^/(attach|cache|image|skin) RewriteRule ^$ /index.cgi [L] ---- 似たもの・・・ RewriteCond %{REQUEST_URI} !^(attach|cache|image|skin) RewriteRule ^\?(.*)$ /cgi-bin/w?$1 RewriteCond %{REQUEST_URI} !^(attach|cache|image|skin) RewriteRule ^(.+)/$ /cgi-bin/w/$1 RewriteCond %{REQUEST_URI} !^(attach|cache|image|skin) RewriteRule ^$ /cgi-bin/w ---- 別のもの ちょっと古いものですが・・・ RewriteCond %{HTTP_USER_AGENT} ^UP\.Browser [OR] RewriteCond %{HTTP_USER_AGENT} ^KDDI [OR] RewriteCond %{HTTP_USER_AGENT} ^Pixo-Browser [OR] RewriteCond %{HTTP_USER_AGENT} ^Semulator [OR] RewriteCond %{HTTP_USER_AGENT} DoCoMo [OR] RewriteCond %{HTTP_USER_AGENT} J-PHONE [OR] RewriteCond %{HTTP_USER_AGENT} voda [OR] RewriteCond %{HTTP_USER_AGENT} Voda RewriteRule ^(.*)\.html$ /cgi-bin/view.cgi?$1.html [T=application/x-httpd-cgi] RewriteCond %{HTTP_USER_AGENT} ^UP\.Browser [OR] RewriteCond %{HTTP_USER_AGENT} ^KDDI [OR] RewriteCond %{HTTP_USER_AGENT} ^Pixo-Browser [OR] RewriteCond %{HTTP_USER_AGENT} ^Semulator [OR] RewriteCond %{HTTP_USER_AGENT} J-PHONE [OR] RewriteCond %{HTTP_USER_AGENT} voda [OR] RewriteCond %{HTTP_USER_AGENT} Voda RewriteRule ^$ /cgi-bin/view.cgi?index.html [T=application/x-httpd-cgi] RewriteCond %{HTTP_USER_AGENT} ASTEL [OR] RewriteCond %{HTTP_USER_AGENT} PDXGW [OR] RewriteCond %{HTTP_USER_AGENT} DreamPass [OR] RewriteCond %{HTTP_USER_AGENT} AVE-Front [OR] RewriteCond %{HTTP_USER_AGENT} WebTV [OR] RewriteCond %{HTTP_USER_AGENT} L-mode RewriteRule ^(.*)\.html$ /block/no.htm [L] #RewriteCond %{HTTP_USER_AGENT} Googlebot [OR] RewriteCond %{HTTP_USER_AGENT} Lycos_Spider [OR] RewriteCond %{HTTP_USER_AGENT} inktomi [OR] RewriteCond %{HTTP_USER_AGENT} moget [OR] RewriteCond %{HTTP_USER_AGENT} Infoseek [OR] RewriteCond %{HTTP_USER_AGENT} Architext [OR] RewriteCond %{HTTP_USER_AGENT} DiaGem [OR] RewriteCond %{HTTP_USER_AGENT} MSIECrawler [OR] RewriteCond %{HTTP_USER_AGENT} wget [OR] RewriteCond %{HTTP_USER_AGENT} PerManSurfer [OR] RewriteCond %{HTTP_USER_AGENT} Pockey-GetHTML [OR] RewriteCond %{HTTP_USER_AGENT} ^Java [OR] RewriteCond %{HTTP_USER_AGENT} WebAuto RewriteRule ^(.*)\.html$ /block/robot.htm [L] RewriteCond %{HTTP_USER_AGENT} BrowserCrasher RewriteRule ^(.*)\.html$ /block/bc.htm [L] RewriteCond %{HTTP_REFERER} ime\.st [OR] RewriteCond %{HTTP_REFERER} ime\.to [OR] RewriteCond %{HTTP_REFERER} ime\.nu [OR] RewriteCond %{HTTP_REFERER} 2ch\.net RewriteRule ^(.*)\.html$ /block/index-2ch.htm RewriteCond %{HTTP_REFERER} jbbs.shitaraba RewriteRule ^(.*)\.html$ /block/index-shitaraba.htm

参考URL:
http://sourceforge.jp/cvs/view/pyukiwiki/PyukiWiki-Devel/.htaccess?view=log

関連するQ&A

  • .htaccess で色々書きなおしてもだめでした

    http://www.example.com/abc/ の場合 URLはそのままで、内容は /main/abc/以下 (の同名ファイル)を表示したい場合、 .htaccess に以下のように記述してもうまく動作しません。 どこがいけないでしょうか。 ----- RewriteBase / RewriteRule ^/(.*)/$ /main/$1/ -----

  • mod_rewriteについて

    http://www.example.com/main/abc/ の場合 URLは http://www.example.com/abc/ になり、内容は/main/abc/を表示 ということをしたいのですが、.htaccessにはどのように記述すればよいでしょうか? (abcの部分は、いろんな文字列の場合があります。) ちなみに以下の記述を追加していて、 http://www.example.com/abc/ の場合は、 URLはそのままで、内容は /main/abc/以下 (の同名ファイル)を表示するようにしています。 ---------- RewriteBase / RewriteRule ^main/.* - [L] RewriteRule ^(.*)/(.*)$ /main/$1/$2 ----------

  • mod_rewrite の記述について

    .htaccess に、mod_rewrite の記述を書いて、以下のようなことをしたいのですが、 1.http://www.example.com/abc/ の場合 URLはそのままで、内容は /main/abc/以下 (の同名ファイル)を表示 2.http://www.example.com/main/abc/ の場合 URLは http://www.example.com/abc/ になり、内容は/main/abc/を表示 以前教えていただいた以下の記述でできるのですが、ディレクトリが追加されたら、.htaccess にも追加が必要になってしまいます。 どのように実現すればよいでしょうか? ------------------------------------------------------------ RewriteCond %{REQUEST_URI} ^/main/(.*)$ RewriteCond %{HTTP:My_Redirect} !yes RewriteRule ^main/(.+)$ http://example.com/$1 [QSA,R] RewriteCond %{REQUEST_URI} ^/(abc|aaa|bbb|ccc|ddd)/ RequestHeader set My_Redirect yes RewriteRule ^(.*)$ /main/$1 [QSA,L] ------------------------------------------------------------

  • htaccessで静的→動的処理、動的→静的301

    例えば・・・ 以下の処理(【1】と【2】)を.htaccess内で処理したいです。 【1】 http://example.com/1.html ↓ http://example.com/kkk.cgi?mode=main&cno=1 ------------------ RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^([0-9]+)\.html$ kkk.cgi?mode=main&cno=$1 [L] ------------------ 上記で変換は出来るのですが、これだと静的URLと動的URLで「同じコンテンツが表示(重複ページ扱い=コピーページ扱い)」されます。 やりたいことは、CGIにアクセスすると「301リダイレクトで静的ページを表示する」という仕様にしたいと考えております。尚、パラメータ無しの直接アクセス(kkk.cgi)は、同フォルダのindex.htmlに301リダイレクトできれば最高です。 【2】 http://example.com/kkk.cgi?mode=main&cno=1 ↓301リダイレクト http://example.com/1.html ------------------ RewriteCond %{QUERY_STRING} ^mode=main&cno=(\d+)$ RewriteRule ^kkk\.cgi$ %1\.html? [R=301,L] ------------------ しかし【1】と【2】の処理を同時に行うとループとなります。phpなどを一切使わず、.htaccessの記述だけでこの問題をクリアできる方、何卒ご指導お願いいたします。

  • .htaccessのリダイレクトについて

    .htaccessで以下のようにURLをリダイレクトさせたいのですが、調べてもなかなかこのようなサンプルがなく、悩んでいます。 以下のようなURLにアクセスした場合 example.com/public example.com/public/ example.com/public/pageA example.com/public/pageB example.com/public/pageB/pageC 以下のように、publicを削除したURLにリダイレクトしたいです。 example.com example.com/ example.com/pageA example.com/pageB example.com/pageB/pageC 上記の設定は.htaccessのRewriteRuleの設定で可能でしょうか? どなたか詳しい方がいたら教えていただきたいです。 よろしくお願いします。

    • ベストアンサー
    • HTML
  • htaccessのマッチが失敗します

    下記のように書いていますがうまく動作しません。 どのように手直しすればうまくいきますでしょうか??? hostname/abc_abc_ab_abc.html というテストを作ってみたのですが、本来であれば、abc3.cgiへ渡されるはずなのですが、全て、all.cgiへ渡されてしまいます。 お分かりになる方、宜しくお願い致します。 RewriteEngine on RewriteBase / ##リクエストURI中に、abcという文字列が3回以上ならabc3.cgiを動作させる RewriteCond %{Request_URI} "^(abc){3,}$" [NC] RewriteRule ^(.+)$ abc3.cgi?$1 [L] ##リクエストURI中に、abcという文字列が1から2回ならabc12.cgiを動作させる RewriteCond %{Request_URI} "^(abc){1,2}$" [NC] RewriteRule ^(.+)$ abc12.cgi?$1 [L] #どれにもマッチしない場合、all.cgiを動作させる。 RewriteRule ^(.+)$ all.cgi?$1 [L]

    • ベストアンサー
    • Perl
  • CakePHPの .htaccess設定について

    CakePHPをVPSで構築したサーバー(Linux)にインストールしました。 .htaccess(mod_rewrite)の設定がうまくいっていないようなので対処の方法を教えてください。 [環境] PHP 5.3.3 Apache 2.3.3 CakePHP 1.3.15 mod_rewriteが動いてるのはチェック用のプログラムで確認しました。 controllerとViewファイルを作り、文字の表示は成功しています。 フォームの実験を行った時にフォーム送信後のURL表示がうまくいっていません。(get/post共に) [書籍を参考にしたプログラム] Sampleコントローラーを作り、Viewの中にSampleディレクトリを作りその中にindex.ctpファイルを設置。フォームにテキストを入力して送信ボタンを押すと、テキストが表示されるプログラムです。 [コントローラー]sample_controller.php class HelloController extends AppController { public $name = 'Hello'; public $uses = null; public $layout = "hello"; function index(){} function sendForm(){ ~フォームで送られたテキストを表示(プログラムは省略)~ } } [index.ctp]のフォームのHTML <form method="post" action="./sendForm"> ~省略~ <input type="submit" /> </form> http://www.example.com/sampleでフォームを開きテキストを入力して送信ボタンを押すと http://www/example.com/sample/sendForm というURLになるはずなのですが、 http://www.example.com/sendForm となってしまいます。 試しにブラウザから「http://www/example.com/sample/sendForm」というURLを入力してみますと、フォームで入力したデータは表示されませんが、ページ自体は表示されます。 もう一つ、index.ctpの<form method="post" action="./sendForm">のアクションのパスを /sample/sendForm に変更してみますとデータも表示され、求めた結果になります。 以前、別の環境でこのプログラムを動かしたときは、<form method="post" action="./sendForm">のままでうまくいったので、.htaccessのファイルの設定に問題があると予想されます。 下記にcakePHPの設定情報を記載しますので、間違っている部分を指摘していただければと思います。 ※ディレクトリの構成は下記のページの「3.4.3. 高度なセットアップ:その他のインストール方法」を参考にしています。 http://cakephp.jp/old_doc/ch03s04.html [アプリケーションディレクトリ] /home ____/me ________/mysite ____________/config ____________/controllers ____________/models ____________/plugins ____________/tmp ____________/vendors ____________/views ____________index.php ____________.htaccess→「htaccessファイル1」● [公開ディレクトリ] /var ____/www ________/html ____________/example.com→ドキュメントルート _______________/css _______________/files _______________/img _______________/js _______________.htaccess→「htaccessファイル2」● _______________css.php _______________favicon.ico _______________index.php [コアファイルディレクトリ] /usr ____/lib ________/cake ____________/cake ________________/config ________________/docs ________________/libs ________________/scripts ________________app_controller.php ________________app_model.php ________________basics.php ________________bootstrap.php ________________dispatcher.php ____________/vendors ____________/plugins ____________index.php ____________.htaccess→「htaccessファイル3」● 「htaccessファイル1」(アプリケーション) -------------------------------------------------- <IfModule mod_rewrite.c> RewriteEngine on   RewriteBase /cake/app→■追加  RewriteRule ^$ webroot/ [L] RewriteRule (.*) webroot/$1 [L] </IfModule> ------------------------------------------------- 「htaccessファイル2」(公開) -------------------------------------------------- <IfModule mod_rewrite.c> RewriteEngine On   RewriteBase / →■追加  RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php?url=$1 [QSA,L] </IfModule> -------------------------------------------------- 「htaccessファイル3」(コア) -------------------------------------------------- <IfModule mod_rewrite.c> RewriteEngine on   RewriteBase /cake→■追加 RewriteRule ^$ app/webroot/ [L] RewriteRule (.*) app/webroot/$1 [L] </IfModule> -------------------------------------------------- 疑問点は下記のようになっています。 (1)追加した部分のRewriteBaseはこれで良いのか? (2)RewriteRule ^$ webroot/ [L] RewriteRule (.*) webroot/$1 [L] の部分はこのままで良いのか?webroot部分の変更は必要か? (3)RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]の部分はこのままで良いのか?

    • ベストアンサー
    • PHP
  • htaccessのリダイレクト記述

    .htaccess リダイレクトについて教えてください。 今まで、WordPressをサブドメインで使っていましたが、新しいドメインに移転します。 今までのURLは、http://old.com/wp/ 新しいURLは、http://new.com となります。 それぞれの記事が検索エンジンに掲載されいますので、それぞれの記事がリダイレクトでそれぞれの記事を表示することが希望です。下記の記述で正しいでしょうか? RewriteEngine on RewriteBase /old.com/wp/ RewriteRule ^$ http://new.com/ [R=301,L] RewriteRule ^(.+)$ http://new.com/$1 [R=301,L] 宜しくお願いいたします。

    • ベストアンサー
    • HTML
  • .htaccessのRewriteRuleの記述

    .htaccessのRewriteRuleの記述方法について質問です。 以下のようなURL移転があったので、RewriteRuleを記述したいのですが、どのように記述すればよろしいでしょうか? 【旧URL】 http://example.com/hoge/hoge.php?id=数字 【新URL】 http://example.com/foo.php?var=1&id=数字 ※数字は対応しています(同じページは同じ数字が入ります)。 なお、私なりにググってみて、以下のように記述したのですが、動きませんでした。 Options +FollowSymLinks RewriteEngine on RewriteRule /hoge/hoge\.php\?(.+) http://example.com/foo.php?var=1&$1 [R=301,L] また、上記のような場合は、そもそもRewriteRuleは適切ではないということであれば、より良い手段をご教示いただきたくお願い申し上げます。

  • mod_rewriteについて

    http://www.example.com/abc/ でアクセスされたら、 ~/main/abc/配下を見に行って、表示させたいのですが、.htaccessはどのように記述すればいいでしょうか? RewriteRule ^/(.*)/$ http://www.example.com/main/$1/ とかでいろいろしたのですが、だめでした。 また、 http://www.example.com/main/abc/ が実行されると http://www.example.com/abc/ にリダイレクトもしたいです。

専門家に質問してみよう