web-dev-qa-db-ja.com

FirefoxではWebサイトのリダイレクトが断続的に機能しますが、IE

Webサイトリダイレクトでエラーをいくつか試しましたが、どうにかしてWebサイトリダイレクトを実行しましたが、Firefoxでは断続的に機能しますが、IEではまったく機能しません。私はなんとかFirefoxですべてのキャッシュをクリアして再試行しましたが、動作しますが、奇妙なことにその後は動作しません。その時点では、ファイルに変更を加えていないことを確認しました。誰かが以前に何か考えやこれに直面したことがありますか?私のウェブサイトが2分のように幸せだったとしても、最終的にリダイレクトされて、その後リダイレクトされないことが判明したので、とてもうれしかったです。 :(( http://example.com 入力するとリダイレクトするだけです https://www.example.com 以下にリダイレクトします.htaccessファイル:

RewriteEngine On
#Options +FollowSymLinks
RewriteCond %{HTTPS} !on [OR]
RewriteCond %{HTTP_Host} ^example\.com$[OR]
RewriteCond %{HTTP_Host} ^www\.example\.com$
RewriteRule .* https://www.example.com%{REQUEST_URI} [R=301,L]

以下は私のログです:

init rewrite engine with requested uri /
pass through /
[perdir D:/wamp64/www/example/] strip per-dir prefix: D:/wamp64/www/example/ -> 
[perdir D:/wamp64/www/example/] applying pattern '.*' to uri ''
[perdir D:/wamp64/www/example/] RewriteCond: input='off' pattern='!on' => matched
[perdir D:/wamp64/www/example/] RewriteCond: input='www.example.com' pattern='^www\\.example\\.com$' => matched
[perdir D:/wamp64/www/example/] rewrite '' -> 'https://www.example.com/'
[perdir D:/wamp64/www/example/] explicitly forcing redirect with https://www.example.com/
[perdir D:/wamp64/www/example/] escaping https://www.example.com/ for redirect
[perdir D:/wamp64/www/example/] redirect to https://www.example.com/ [REDIRECT/301]

VPNからログアウトしたときにのみWebサイトがリダイレクトされることもわかりました(VPNに接続して、リダイレクトに行った情報を修正または取得するためにサーバーに接続できるようにする必要があります)

以下は、.htaccessファイルに追加したアイテムです。

    RewriteCond %{HTTPS} !on [OR]
    RewriteCond %{HTTP_Host} ^example\.com$
    RewriteCond %{HTTP_Host] ^www\.example\.com$
    RewriteRule .* https://www.example.com%{REQUEST_URI} [R=301,L]

以下は私のhttpd-vhosts.confです:

<VirtualHost *:80>
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot "d:/wamp64/www/example"
    <Directory  "d:/wamp64/www/example/">
        Options +Indexes +Includes +FollowSymLinks +MultiViews
        AllowOverride All
        Order allow,deny
        Allow from all
        Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains"
    </Directory>
</VirtualHost>

私のSSL証明書はhttpd-ssl.confで構成されたので、httpd-vhosts.confをVirtualHost *:80としてポイントします。以下は、httpd-vhosts.confです。

<VirtualHost *:80>
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot "d:/wamp64/www/example"
    <Directory  "d:/wamp64/www/example/">
        Options +Indexes +Includes +FollowSymLinks +MultiViews
        AllowOverride All
        Order allow,deny
        Allow from all
        Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains"
    </Directory>
</VirtualHost>

更新

以下は[OR]を追加して.htaccessを更新するものです。

RewriteCond %{HTTPS} !on [OR]
RewriteCond %{HTTP_Host} ^example\.com$
RewriteRule .* https://www.example.com%{REQUEST_URI} [R=301,L]

そして、以下は私が得たログです:

strip per-dir prefix: D:/wamp64/www/example/ -> 
applying pattern '.*' to uri ''
RewriteCond: input='off' pattern='!on' => matched
rewrite '' -> 'https://www.example.com/'
explicitly forcing redirect with https://www.example.com/
escaping https://www.example.com/ for redirect
redirect to https://www.example.com/ [REDIRECT/301]

ブラウザでもう一度試しましたが、リダイレクトされませんでした。私もFirefoxでデバッグしようとしています、そして私が得たホストはexample.comです

これは私が削除したものです[OR]

RewriteCond %{HTTPS} !on 
RewriteCond %{HTTP_Host} ^example\.com$
RewriteRule .* https://www.example.com%{REQUEST_URI} [R=301,L]

ログ:

RewriteCond: input='off' pattern='!on' => matched
RewriteCond: input='www.example.com' pattern='^example\\.com$' => not-matched

私のリダイレクトが機能していることを教えてください。これは何ヶ月も働いていて、今は考えがわからなくなっています(私の愚かな間違いによるものではないことを願っています...祈っています!)。よろしくお願いします!

2
Petri

私はあなたが実際にこの状態を望んでいないと信じています:

RewriteCond %{HTTP_Host} ^www\.example\.com$

.htaccessバージョンにも適用されるhttps://wwwからのものであるとすると、それ自体に無限リダイレクトループが発生するためです。

RewriteRule .* https://www.example.com%{REQUEST_URI} [R=301,L]
3
Esa Jokinen

欠けているスペース文字だと思います。これを変更してください:

RewriteCond %{HTTP_Host} ^example\.com$[OR]

これに:

RewriteCond %{HTTP_Host} ^example\.com$ [OR]

ログファイルのエントリは、 http://www.example.comhttps://www.example.com/ に正常に書き換えられたことを証明しました。彼らは http://example.com について何も証明しませんでした。スペース文字を追加すると、後者が修正されます。

2
liverwust

の代わりに mod_rewrite Virtualhostの定義では、次のようなものを使用する必要があります。

ServerName  www.example.com
ServerAlias example.com
Redirect permanent / https://www.example.com/

Apache httpd documentation によると。

mod_rewriteは、他の代替手段が必要であることが判明した場合、最後の手段と見なす必要があります。より簡単な代替手段がある場合にそれを使用すると、構成が混乱しやすく、壊れやすく、保守が困難になります。

1
dexter