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

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

新規登録して質問してみよう
ただいま回答率
85.48%
.htaccess

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

Q&A

解決済

2回答

2241閲覧

.htaccessに詳しい方教えてください

dstrykn

総合スコア20

.htaccess

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

0グッド

0クリップ

投稿2015/11/28 13:34

ホームページを引っ越し、ドメインを変更しました。
301リダイレクトをしたいのですが、うまく設定できません。
ブログなどで、調べたのですが、微妙に記述の仕方が違うようで、なにが正しいのかわかりません。
移転前のサーバーはロリポップです。移転先はwordpressで作ったブログです。
やりたいのは、変更前のドメインの特定の2ページを移転先の特定のそれぞれのページに飛ばし、他のページは全てトップページに飛ばしたいです。
下記のように記述し、トップページは飛ばすことができましたが、特定の2ページを飛ばせませんでした。

Redirect 301 /index.html http://xxx.com
Redirect 301 /?mode=sk#info http://xxx.com/about

web上の.htaccess作成ツールを試して作成してみましたが、今度はどのページもうまくいきませんでした。
<Files ~ "^.(htaccess|htpasswd)$">
deny from all
</Files>
Redirect permanent /index.php http://xxx.com
Redirect permanent /?mode=sk#info http://xxx.com/about
order deny,allow

それ以外のページは404になってしまいます。
よろしくお願いします。

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

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

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

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

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

guest

回答2

0

.htaccess の Redirect では、クエリーの内容で判断はできません。
以下のような判定を入れてみてはいかがでしょうか?

RewriteBase / RewriteEngine on RewriteCond %{QUERY_STRING} (^|&)mode=sk#info(&|$) RewriteRule ^/?$ http://xxx.com/about [L,R=301]

3行目は、引数が"mode=sk#info"で始まり(もしくは途中から&で始まり)、その後ろに引数が&で継続している(もしくはこれで終わっている)場合、
4行目で、http://xxx.com/about に301でリダイレクトさせています。

複数の遷移パターンがあれば、RewriteCond と RewriteRule の2行を繰り返して記述することで対応できます。

私の環境では引数が違うので、検証までは至ってませんがお試しください。

投稿2015/11/28 15:43

kurosawa

総合スコア780

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

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

otn

2015/11/28 18:40

さらにURLの#以降はサーバーには来ませんので、パターンの#infoの部分は削除する必要があります。
kurosawa

2015/11/28 19:38

そうですね。otnさん、ご指摘ありがとうございます 複数の連結もなさそうなので、 ``` RewriteCond %{QUERY_STRING} ^mode=sk$ ``` で良いかと思います。(未検証なので間違ってたらごめんなさい)
guest

0

ベストアンサー

投稿2015/11/28 15:39

TaichiYanagiya

総合スコア12146

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

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

dstrykn

2015/12/01 01:18 編集

kurosawaさん、otnさん ご教授ありがとうございます。 連絡が遅くなり、すみません。 教えていただいた、 RewriteCond %{QUERY_STRING} ^mode=sk$ で飛んだのですが、http://xxx.com/about/?mode=sk#info となります。 http://xxx.com/abc の場合は、 http://zzz.com/abc となります。 これは、それぞれ、どこを直せば、いいのでしょうか。 記述したコードは以下になります。 RewriteBase / RewriteEngine on Redirect 301 /index.html http://xxx.com/ RewriteCond %{QUERY_STRING} ^mode=sk$ RewriteRule ^/?$ http://xxx.com/about[NE,R=301,L] RewriteCond %{QUERY_STRING} ^mode=f RewriteRule ^/?$ お手数ですが、ご教授よろしくお願いします。
dstrykn

2015/12/01 01:21

TaichiYanagiyaさん ご教授ありがとうございます。 自分でいろいろいじってみたのですが、記述の仕方がわかりません。 申し訳ないのですが、何分しろうとなもので、コードを教えていただければ助かります。 お手数ですが、ご教授よろしくお願いします。
TaichiYanagiya

2015/12/01 02:24

kurosawa さんの回答どおりと思いますが、リライト後に Query String を付けないようにするには、最後に「?」だけ付けるといいようです。 RewriteCond %{QUERY_STRING} ^mode=sk$ RewriteRule ^/?$ http://xxx.com/about/? [NE,R=301,L] ・RewriteCond と RewriteRule は別の行に。順番は大事。 ・[フラグ] ([NE,R301,L]など)の前にスペースが必要。 ・最後の「mode=f」のあとの RewriteRule が不完全(書式エラー)。
dstrykn

2015/12/07 14:18

TaichiYanagiyaさん ご教授ありがとうございます。 返信が遅くなりましたが、なんとか設定できました。 本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問