質問: 下記のようなコードにて、モバイル機器でアクセスした場合に、モバイル用のページに移動しようとしています。 しかしながら、スマホでアクセスしても切り替わってくれません。 試しに転送先を yahoo のような外部にしてみると正常に遷移します。 なぜ、外部URLに対してはOKで、サイト内URLはNGなのか...原因がわからずにいます。 転送元 https://example.com/wp/p/download/112233 転送先 https://example.com/wp/p/dw_mobile/112233 .htaccess設置場所 https://example.com/wp/.htaccess ``` RewriteEngine On RewriteCond %{HTTP_USER_AGENT} (iPod|iPhone|iPad|Android|Windows\ Phone) RewriteRule ^p\/download\/(.*?)$ https://example.com/wp/p/dw_mobile/$1 [L] # RewriteRule ^p\/download\/(.*?)$ https://www.yahoo.co.jp/ [L] ``` このサイトはWordpresで稼働しています。 このコードに下にはWorpdress用の.htaccess記述があります。 ``` RewriteEngine On RewriteBase /wp/ RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /wp/index.php [L] ``` よろしくおねがいします。 【追記】 `RewriteRule ^p\/download\/(.*?)$ https://example.com/wp/p/dw_mobile/$1 [L]` この部分の後半を少しずつ削除しながら試してみました。 https://example.com/wp/p/dw_mobile/$1 → 転送元のまま example.com/wp/p/dw_mobile/$1 → 転送元のまま /wp/p/dw_mobile/$1 → 転送元のまま /p/dw_mobile/$1 → 404エラー /dw_mobile/$1 → 404エラー /$1 → 404エラー 【追記2】 いろいろ書き換えながらテストしている最中に偶然次のことに気が付きました。 転送先を https から http にするとページ移動しました。 変更前 https://example.com/wp/p/dw_mobile/$1 変更後 http://example.com/wp/p/dw_mobile/$1 .htaccess内にはhttpの場合、httpsの場合などの転送記載はいっさいありません。 なぜ、httpなら転送してくれるのか...さっぱりわかりません 利用しているサーバーは さくらサーバー です。
回答: 転送先が https は転送されず、 httpなら転送される、 挙動がまったく理解不能なのですが、動作することを優先します。 まずhttpに転送後に別の転送ルールにて http から https に転送して解決しました。 ``` RewriteEngine on RewriteCond %{ENV:HTTPS} !on RewriteCond %{REQUEST_URI} !/wp-cron\.php$ RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] ``` 原因もわからないのでちょっと気持ち悪い感じがします。 問題としては解決しますが、理由がわかりましたら教えて下さい。 よろしくおねがいします。