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

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

新規登録して質問してみよう
ただいま回答率
85.49%
WordPress

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

リダイレクト

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

正規表現

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

.htaccess

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

Q&A

解決済

1回答

615閲覧

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

退会済みユーザー

退会済みユーザー

総合スコア0

WordPress

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

リダイレクト

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

正規表現

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

.htaccess

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

0グッド

0クリップ

投稿2018/06/27 12:46

前提・実現したいこと

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

RewriteCond %{HTTP_HOST} ^localhost/abc/w

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

Apache

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

投稿2018/06/27 14:22

otn

総合スコア84491

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/06/27 14:51

回答ありがとうございます!HTTP_HOST、確かに理解していませんでした。ネット上の正規表現の情報と、色々調べてはコピペして検証していました。勉強します! 上記のコードを.htaccessに記載しましたが、動きは変わらず、/w/がURLに入っていると404になってしまいます(涙)
otn

2018/06/27 14:58

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

退会済みユーザー

2018/06/28 01: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に記述する
otn

2018/06/28 04:18

> /w/がURLに入っていると404になってしまいます 現象としては、URLが http://localhost/abc/w/~~ と入力したまま書き換わらないということでしょうか?
退会済みユーザー

退会済みユーザー

2018/06/29 02: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の本体が入っているフォルダを指定するとエラーになる」という点が、上手くいかない原因になっていると思われますが、何かヒントなどありましたらアドバイスいただけますと嬉しいです。引き続き検証してみます。
otn

2018/06/29 04:28

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

退会済みユーザー

2018/06/29 08:09

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問