web-dev-qa-db-ja.com

Httpsがサブページに対してのみ有効で、ホームページには有効でないように.htaccessを書く方法

私のドメインのルートは正常にサブディレクトリにリダイレクトされます、つまりexample.comexample.com/abcにリダイレクトされます。

example.comにはWordPressがインストールされていません。

example.com/abcには独自のWordPressインストールがあります。

http://example.com/abcのホームページはHTTPSではありませんし、そうしたくないのですが、すべてのサブページをHTTPSにしたいのです(例:https://example.com/abc/xyzまたはhttps://example.com/abc/thistoo)。

私の現在の.htaccessファイルは標準のWordPressのものです...

# BEGIN WordPress

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /abc/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /abc/index.php [L]
</IfModule>

# END WordPress

私はここで見つけた他の多くの解決策をチェックしてみましたが、これまでのところ喜びはありません。

pS私は.htaccessファイルにこのような変更を加えた後にパーマリンクを再保存することを知っています。

1
au_Martin

おそらくあなたの.htaccessファイルは/abcサブディレクトリにありますか?この場合、ホームページを除くすべてのサブページでHTTPSを強制するには、次のようにします。

これはあなたの.htaccessファイルの一番上に行く必要があります:

RewriteCond %{HTTPS} !on
RewriteRule !^(index\.php)?$ https://example.com%{REQUEST_URI} [R=302,L]

これは、SSL証明書がアプリケーションサーバーに直接インストールされていることを前提としています。

否定RewriteRuleパターン!^(index\.php)?$は空でない(またはindex.phpではない)のみ一致します)URLパスなので、これはホームページを除外します。

キャッシュの問題を回避するために、302(一時的)を301(永続的)に変更して問題ないことが確認できた場合にのみ変更してください。テストする前にブラウザのキャッシュをクリアしてください。


さておき:

RewriteBase /abc/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /abc/index.php [L]

RewriteBaseディレクティブを設定したので、RewriteRule置換からディレクトリ接頭辞を削除できます(これがRewriteBaseディレクティブの動作です)

RewriteRule . index.php [L]

ただし、.htaccessファイルは/abcサブディレクトリにあるため、実際にはRewriteBaseディレクティブやdirectory-prefixは必要ありません。

0
MrWhite