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

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

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

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

Q&A

解決済

1回答

307閲覧

.htaccessの記述方法に関して

shi_23

総合スコア6

.htaccess

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

0グッド

0クリップ

投稿2021/08/03 08:02

編集2021/08/03 09:50

ファイルのディレクトリ構造を変更したため、サイト内でリダイレクトの処理を行いたいと考えております。

設定したい内容は下記通りです。
0. /test/配下の全てのファイルを/test-new/にリダイレクト
(/test/配下のファイル名に規則性がないので、新規ディレクトリの/test-new/に飛ばせればOK、一部2.3下記のファイルのみ除外)
0. /test/test1.htmlを/test-new/test-new1/にリダイレクト
0. /test/test2.htmlを/test-new/test-new2/にリダイレクト

上記のリダイレクトを実行するため、下記を.htaccessに記述したのですが、設定が間違っているようでサイトが表示できなくなってしまいました。

RewriteEngine On RewriteBase / RewriteCond %{REQUEST_URI} ^/test RewriteRule ^test/test1.html /test-new/test-new1/ [R=301,L] RewriteCond %{REQUEST_URI} ^/test RewriteRule ^test/test2.html /test-new/test-new2/ [R=301,L] # testディレクトリをtest-newディレクトリへのアクセスをリダイレクト(除外条件あり) RewriteCond %{REQUEST_URI} ^/test RewriteCond %{REQUEST_URI} !^test/test1.html RewriteCond %{REQUEST_URI} !^test/test2.html RewriteRule ^test(.*) /test-new/ [R=301,L]

かなり初歩的な内容かと思いますが、記述が間違っている箇所がございましたらご指摘いただけると嬉しいです。

※記述の内容に一部誤りがあったため、編集いたしました!(2021/8/3 18:39)

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

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

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

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

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

guest

回答1

0

ベストアンサー

`RewriteCond %{REQUEST_URI} ^/test

RewriteRule ^shops/test1.html /test-new/test-new1/ [R=301,L]`

URLのパス部分の先頭が/testで、かつ、先頭が/shops/test1.htmlのでもあると言うことはありえないので、この2行は意味無しです。

`RewriteCond %{REQUEST_URI} ^/test

RewriteRule ^test/test2.html /test-new/test-new2/ [R=301,L]`

これは、
URLのパス部分の先頭が/testで、かつ、先頭が/test/test2.htmlのでもあるということで、
/test/test2.html/test-new/test-new2/にリダイレクトされるはずです。
RewriteCondの行は意味無しですが)

`RewriteCond %{REQUEST_URI} ^/test

RewriteCond %{REQUEST_URI} !^test/test1.html
RewriteCond %{REQUEST_URI} !^test/test2.html`

は、URLのパス文の先頭が/testであり、かつ、test/test1.htmltest/test2.htmlでない場合というRewriteCondですがパス部分は必ず/で始まるので、test/test1.htmltest/test2.htmlのようにtで始まることはあり得ず、2つめ3つめは常に真です。
で、

RewriteRule ^test(.*) /test-new/ [R=301,L]

で、/testで始まれば/test-new/にリダイレクトですが、/test-new//testで始まっているので、再度リダイレクトされ、つまり、リダイレクトループになると思います。

何をしたいのか不明瞭な部分もありますが、適当に想像して書くと、

Apache

1RewriteEngine On 2RewriteBase / 3 4#↓これは記述意図が想像できないのでパス。shopsはtestの記述ミス??? 5### RewriteCond %{REQUEST_URI} ^/test 6### RewriteRule ^shops/test1.html /test-new/test-new1/ [R=301,L] 7 8RewriteRule ^test/test2.html$ /test-new/test-new2/ [R=301,L] 9 10# shopsディレクトリをshop-finderへのアクセスをリダイレクト(除外条件あり) 11RewriteCond %{REQUEST_URI} !^/test/test1.html$ 12RewriteCond %{REQUEST_URI} !^/test/test2.html$ 13RewriteRule ^test/ /test-new/ [R=301,L]

投稿2021/08/03 09:43

otn

総合スコア84806

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

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

shi_23

2021/08/04 01:04 編集

ご回答ありがとうございます! ご指摘の通り/shopsの記述は誤りです。大変申し訳ありません。 ご回答いただいた通り ``` RewriteRule ^test/test1.html$ /test-new/test-new1/ [R=301,L] RewriteRule ^test/test2.html$ /test-new/test-new2/ [R=301,L] # testディレクトリをtest-newへのアクセスをリダイレクト(除外条件あり) RewriteCond %{REQUEST_URI} !^/test/test1.html$ RewriteCond %{REQUEST_URI} !^/test/test2.html$ RewriteRule ^test/ /test-new/ [R=301,L] ``` にて設定してみます!ご回答いただきましてありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問