質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.34%

  • WordPress

    7665questions

    WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

  • 正規表現

    830questions

    正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

  • .htaccess

    408questions

    Apacheウェブサーバーにおいて、ディレクトリ単位で設置及び設定を行う設定ファイルを指します。

  • リダイレクト

    126questions

    プログラムの入力元や出力先を通常とは別の場所に転送させることをリダイレクトと呼びます。

301リダイレクト サブディレクトリを除き、下層は同一URLにする方法

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 529
退会済みユーザー

退会済みユーザー

 前提・実現したいこと

http://localhost/abc/w/.../

を/w/を抜いたアドレス(下層は同一URL)

http://localhost/abc/.../
に301リダイレクトをしたいと思い、試行錯誤していますが上手くいきません。

 試したこと

htaccessに以下の記述を試みましたが、どれも上手く転送されません。

<その1>
RewriteEngine on
RewriteCond %{HTTP_HOST} ^localhost/abc/w
RewriteRule (.*) http://localhost/abc/$1 [R=301,L]

<その2>
RewriteRule ^w/(.*)$ http://localhost/abc/$1 [R=301,L]

<その3>
RewriteCond %{HTTP_HOST} ^localhost/abc/w$
RewriteRule ^(.*)$ http://localhost/abc/$1 [R=301,L]

 補足情報(FW/ツールのバージョンなど)

本番サイトhttp://example.com/w/で運営中のwordpressを、フォルダの置き場所はそのままの状態でURLをhttp://example.com/に変更したいと思い、まずはローカルのhttp://localhost/abc/w/で試しているところです。

wordpressの設定とhtaccessに以下の記述をすることで、http://localhost/abc/での表示には成功しました。

しかし、http://localhost/abc/w/.../でアクセスがあったとき、http://localhost/abc/.../に転送されるものと、404になるものがあります。被リンクを無駄にしないよう、404を出さず、http://localhost/abc/.../へ転送したいです。

 BEGIN WordPress

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /abc/w/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /abc/w/index.php [L]
</IfModule>

 END WordPress

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

RewriteCond %{HTTP_HOST} ^localhost/abc/w

「HTTP_HOSTとは何か」を理解されていないようですね。HTTP_HOSTとはホスト名のことです。

RewriteEngine on
RewriteRule ^abc/w/(.*) /abc/$1 [R=301,L]

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/06/27 23:51

    回答ありがとうございます!HTTP_HOST、確かに理解していませんでした。ネット上の正規表現の情報と、色々調べてはコピペして検証していました。勉強します!

    上記のコードを.htaccessに記載しましたが、動きは変わらず、/w/がURLに入っていると404になってしまいます(涙)

    キャンセル

  • 2018/06/27 23:58

    RewriteBaseが入っている下に書いたんですかね。
    であれば、
    RewriteRule ^abc/w/(.*) http://localhost/abc/$1 [R=301,L]

    キャンセル

  • 2018/06/28 10:45

    回答ありがとうございます!色々なパターンを総当たりで試してみましたが、まだ動作しない状況です。RewriteBaseについては、個別ページのリダイレクトのとき、書かずに動作していたので、書いていませんでした。RewriteBaseはどういう意味があるのか調べましたが、現状では理解できませんでしたので、今後の学習課題にします。。どこかおかしな点が見当たりましたら、ご指摘いただけますと嬉しいです。

    .htaccessの中身↓
    RewriteEngine on
    RewriteRule ^abc/w/(.*) http://localhost/abc/$1 [R=301,L]

    # BEGIN WordPress
    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /abc/w/
    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /abc/w/index.php [L]
    </IfModule>

    # END WordPress

    ・パターン1
    RewriteEngine on
    RewriteRule ^abc/w/(.*) http://localhost/abc/$1 [R=301,L]

    ・パターン2
    RewriteEngine on
    RewriteBase /abc/w/
    RewriteRule ^abc/w/(.*) http://localhost/abc/$1 [R=301,L]

    パターン3
    RewriteEngine on
    RewriteBase /abc/w/
    RewriteRule ^abc/w/(.*) /abc/$1 [R=301,L]

    パターン4
    RewriteEngine on
    RewriteRule ^abc/w/(.*) /abc/$1 [R=301,L]

    パターン5
    上記を# BEGIN WordPress〜の後に記述する

    パターン6
    上記をabcフォルダ内の.htaccessに記述する

    キャンセル

  • 2018/06/28 13:18

    > /w/がURLに入っていると404になってしまいます

    現象としては、URLが http://localhost/abc/w/~~ と入力したまま書き換わらないということでしょうか?

    キャンセル

  • 2018/06/28 13:26

    はい。http://localhost/abc/w/にアクセスすると、入力したまま書き換わらない状況です。

    キャンセル

  • 2018/06/29 11:52

    試しに、testフォルダを新たに作って検証しました。

    RewriteEngine On
    RewriteRule ^test/(.*)$ http://localhost/abc/hoge/ [R=301,L]

    上記の場合、testフォルダのアクセスはすべてhttp://localhost/abc/hoge/へリダイレクトします。しかし

    RewriteEngine On
    RewriteRule ^w/(.*)$ http://localhost/abc/hoge/ [R=301,L]

    こちらは404エラーになります。

    「wordpressの本体が入っているフォルダを指定するとエラーになる」という点が、上手くいかない原因になっていると思われますが、何かヒントなどありましたらアドバイスいただけますと嬉しいです。引き続き検証してみます。

    キャンセル

  • 2018/06/29 13:28

    RewriteRule . /abc/w/index.php [L]
    という行がありますが、/abc/w/index.php は存在するのですか?

    キャンセル

  • 2018/06/29 17:09

    index.phpは存在します。
    まだ解決していませんが、回答いただいたおかげで、どこが問題点なのかわかりました。もっと焦点をしぼって、また違った角度から再質問したいと思います。ありがとうございましたm(_ _)m

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.34%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • WordPress

    7665questions

    WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

  • 正規表現

    830questions

    正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

  • .htaccess

    408questions

    Apacheウェブサーバーにおいて、ディレクトリ単位で設置及び設定を行う設定ファイルを指します。

  • リダイレクト

    126questions

    プログラムの入力元や出力先を通常とは別の場所に転送させることをリダイレクトと呼びます。