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

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

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

HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

Q&A

解決済

2回答

899閲覧

htaccessの書き方

u-sukesan

総合スコア156

HTTP

HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

0グッド

0クリップ

投稿2021/11/26 02:51

編集2021/11/26 02:52

301転送の書き方について質問いたします。

転送したいURL

https://○○○.com/s1/
https://○○○.com/s2/
https://○○○.com/s3/
https://○○○.com/s4/

https://○○○.com/s1/s2/
https://○○○.com/s2/s4/
https://○○○.com/s1/s2/s3/s4/

など

s1~s4の組み合わせのURLがあります。

これを
s1を含む場合は s=1
s2を含む場合は s=2
s3を含む場合は s=3
s4を含む場合は s=4

https://△△△.com/?s=1
としてGETパラメータのURLに転送したい

https://○○○.com/s2/s4/
の場合は
https://△△△.com/?s=2&s=4

https://○○○.com/s1/s2/s3/s4/
の場合は
https://△△△.com/?s=1&s=2&s=3&s=4

としして301転送をかけたいと思います。

RewriteCond %{REQUEST_URI} ^(.)/s1/(.)
RewriteRule . /?s=1 [L,R=301]
と含む場合の条件を指定してチャレンジしましたが
https://○○○.com/s2/s4/のように複数の場合、パラメーターを追記する方法がわかりませんでした。

4つの組み合わせを

RewriteCond %{REQUEST_URI} ^(.)/s1/
RewriteRule . /?s=1 [L,R=301]
RewriteCond %{REQUEST_URI} ^(.
)/s1/s2/
RewriteRule . /?s=1&s=2 [L,R=301]
RewriteCond %{REQUEST_URI} ^(.*)/s1/s4/
RewriteRule . /?s=1&s=4 [L,R=301]

とひとつずつ書けばいいのでしょうが、他にも
https://○○○.com/a1/a2/
https://○○○.com/x1/x2/
などのパターンもあるために膨大になるため、簡潔に書く方法がないかと思い質問いたしました。

何か方法はあるのでしょうか

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

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

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

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

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

yambejp

2021/11/26 03:04

実際にディレクトリとして運用しているものはないのですか?
u-sukesan

2021/11/26 03:14 編集

https://○○○.com/s1/s2/s3/s4/ 実際に運用サイトはあります。 という回答であっていますでしょうか または/s1/とはURLパラメータでディレクトリは存在しないです。 こちらの回答が正解でしょうか
yambejp

2021/11/26 03:42

たとえば https://○○○.com/imgs/ などで画像を保存していたりもしないのですね? であればパラメータを一旦サーバーサイドのプログラムにおくって そこできりわければいいのでは?
u-sukesan

2021/11/26 03:45

https://○○○.com から https://△△△.com へ違うドメインへの転送になるのですが パラメータを一旦サーバーサイドのプログラムにおくって そこできりわけるとはどういうことでしょう 質問ばかりですいません
yambejp

2021/11/26 03:57 編集

https://○○○.comにサーバーサイドプログラムはいれられないのですか? たとえばphpならindex.phpを用意して htaccessで https://○○○.com/s1/s2/s3/s4https://○○○.com/index.php?param=s1/s2/s3/s4 のように渡して、index.phpで解釈して https://△△△.com/?s=1&s=2&s=3&s=4 に転送すればよいということです もちろんhtaccessで https://△△△.com/index.php?param=s1/s2/s3/s4 に転送して△△△.comのphpで解釈してもよいでしょう
u-sukesan

2021/11/26 03:59

間違っていたらすいません。htaccessで https://○○○.com/s1/s2/s3/s4https://○○○.com/index.php?param=s1/s2/s3/s4 に転送し https://○○○.com/index.phpでparam=s1/s2/s3/s4を s=1&s=2&s=3&s=4に分解し header関数などで https://△△△.com/?s=1&s=2&s=3&s=4 に転送するということでしょうか
guest

回答2

0

ディレクトリ名が「アルファベット1文字 + 数字1文字」で、深さが 1〜4つまでということであれば、深さごとに以下のような RewriteRule を書くのはどうでしょうか。
もっとスマートな書き方があるかもしれませんが。

RewriteEngine On RewriteRule ^([a-z])([0-9])/?$ https://△△△.com/?$1=$2 [L,R=301] RewriteRule ^([a-z])([0-9])/([a-z])([0-9])/?$ https://△△△.com/?$1=$2&$3=$4 [L,R=301] RewriteRule ^([a-z])([0-9])/([a-z])([0-9])/([a-z])([0-9])/?$ https://△△△.com/?$1=$2&$3=$4&$5=$6 [L,R=301] RewriteRule ^([a-z])([0-9])/([a-z])([0-9])/([a-z])([0-9])/([a-z])([0-9])/?$ https://△△△.com/?$1=$2&$3=$4&$5=$6&$7=$8 [L,R=301]

投稿2021/11/26 06:57

TaichiYanagiya

総合スコア12146

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

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

u-sukesan

2021/12/01 01:41

ありがとうございます。 参考にさせていただきます。 今回はパラメータにしてphp側で処理する方向で考えたいと思います。
guest

0

自己解決

https://○○○.com/s1/s2/s3/s4

https://○○○.com/index.php?param=s1/s2/s3/s4
のように渡して、
PHP側で処理する方向で考えたいと思います。

投稿2021/12/01 01:42

u-sukesan

総合スコア156

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問