環境
さくらのVPS CentOS 6.10
Apache/2.2.15
PHP 5.4.45
SSL化でwww無しのリダイレクトを実装。
お世話になります。
前回以下の質問で、回答をいただきまして書き換えられたページが表示されるようになったのですが。
質問タイトル
「httpsのアクセスでRewriteにより書き換えられたページが表示されなくなった。」
https://teratail.com/questions/145051
その後、完全にSSL化ですべてのページが https でアクセス表示可能になったかの確認作業をしておりましたところ
Rewrite により書き換えられたページの URL がある直打ちではおかしい表示になってしまうことに気付きました。
以下の書き換えで
RewriteRule ^/([0-9A-Za-z]+)/shop/([0-9A-Za-z]+)/$ /var/www/html/List/$1/shop/index.php?unique=$2 [L] RewriteRule ^/([0-9A-Za-z]+)/shop/([0-9A-Za-z]+)$ /var/www/html/List/$1/shop/index.php?unique=$2 [L]
※「List」というディレクトリは Alias で隠れる部分です。
上記の Rewrite で以下の URL のページが表示されます。
https://example.com/kantou/shop/n78de36u/
それを以下4つのパターンで直打ちします。
example.com/kantou/shop/n78de36u/ http://example.com/kantou/shop/n78de36u/ www.example.com/kantou/shop/n78de36u/ http://www.example.com/kantou/shop/n78de36u/
上記4つのパターンの直打ちでは正しい URL で表示されてページも正常ですが以下のパターンだけで問題が出ます。
https://www.example.com/kantou/shop/n78de36u/
この https に wwwあり の直打ちでアクセスすると
https://example.com/kantou/shop/n78de36u/?unique=n78de36u
このように wwwなし にはなってスラッシュ区切りの書き換えもできているのですが
一部書き換えられずに ?unique=n78de36u の部分が表示されてしまうのです。
この時ページは正常に表示されており、URL だけが一部書き換えられないとなってしまいます。
上記の RewriteRule は前回の質問で解決した
/etc/httpd/conf.d/ssl.conf の
<VirtualHost _default_:443> 内に記述しています。
ちなみに wwwなし で https での Rewrite は
/etc/httpd/conf/httpd.conf 内に以下の記述です。
RewriteEngine on RewriteCond %{HTTPS} off RewriteRule ^.*$ https://example.com%{REQUEST_URI} [R=301,L] RewriteCond %{HTTP_HOST} !^example.com$ [NC] RewriteRule ^.*$ https://example.com%{REQUEST_URI} [R=301,L]
上記となります。
以上解決したい問題は
以下のようにhttps で www をつけた状態の
https://www.example.com/kantou/shop/n78de36u/
直打ちでアクセスして https のwwwなし の ?unique=n78de36u が付かない状態に出来ないでしょうか?
質問文が長く分かりにくかったのではと思い少し短く修正いたしました。
お力をお貸しいただけますよう宜しくお願いいたします。
≪質問の追記をさせていただきます≫
★こういうリダイレクトがしたい。
全てのアクセス、リンクを辿るアクセス、URL直打ちのアクセスで
https://example.com/
へとリダイレクトしたいです。
http://www.example.com/ ⇒ https://example.com/ 実装されている https://www.example.com/kantou/ ⇒ https://example.com/kantou/ 実装されている https://www.example.com/kantou/shop/n78de36u/ ⇒ 実装されない。詳細は最下部に
★/etc/httpd/conf/httpd.conf 内に記述
RewriteEngine on RewriteCond %{HTTPS} off RewriteRule ^.*$ https://example.com%{REQUEST_URI} [R=301,L] RewriteCond %{HTTP_HOST} !^example.com$ [NC] RewriteRule ^.*$ https://example.com%{REQUEST_URI} [R=301,L]
★/etc/httpd/conf.d/ssl.conf 内に記述
RewriteRule ^/([0-9A-Za-z]+)/shop/([0-9A-Za-z]+)(/)?$ /var/www/html/List/$1/shop/index.php?unique=$2 [L]
★一部実装されない内容
現状で通常のアクセスで有れば階層下のページでも意図するリダイレクトが実行される。
ただ以下の Rewrit で書き換えられたページだけが、
RewriteRule ^/([0-9A-Za-z]+)/shop/([0-9A-Za-z]+)(/)?$ /var/www/html/List/$1/shop/index.php?unique=$2 [L]
https に wwwあり の直打ちでアクセスすると
https://www.example.com/kantou/shop/n78de36u/
以下のように ?unique=n78de36u の部分が表示されてしまうのです。
https://example.com/kantou/shop/n78de36u/?unique=n78de36u
wwwなしには変換されているので、後方の ?unique=n78de36u の部分が付かないようにしたい。
以上ですが、宜しくお願いいたします。
※間違えて【解決済み】としてしまったために以下で分かりやすい質問にして再度投稿しました。
https://teratail.com/questions/147438
宜しくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/09/19 08:50