
Apacheを使って次のことをしようとしています。
http(s)://domain.local(/) を要求したら、https://www.domain_new.local などの新しいドメインにリダイレクトする必要があります。
私が尋ねるとhttp://domain.local/gp次にリダイレクトする必要があります。https://domain.local/gp
以下を試しましたが、うまくいかないようです。
<VirtualHost *:80>
ServerName domain.local
DocumentRoot "/var/www/html/"
# html directory contains gp directory
<Directory /var/www/html>
Options FollowSymLinks
AllowOverride All
Require all granted
</Directory>
RewriteEngine on
RewriteCond "%{HTTP_HOST}%{REQUEST_URI}" "^domain\.local\/?$"
RewriteRule "^domain\.local\/?$" "https://domain_new.local"
RewriteCond "%{HTTP_HOST}%{REQUEST_URI}" "^domain\.local\/gp(.*)"
RewriteRule "^/?(.*)" "https://%{SERVER_NAME}/$1"
</VirtualHost>
<VirtualHost *:443>
ServerName domain.local
DocumentRoot "/var/www/html/"
SSLEngine on
# html directory contains gp directory
<Directory /var/www/html>
Options FollowSymLinks
AllowOverride All
Require all granted
</Directory>
SSLCertificateFile /etc/pki/tls/certs/domain.local.crt
SSLCertificateKeyFile /etc/pki/tls/private/domain.local.key
SSLCertificateChainFile /etc/pki/tls/certs/domain.local.ca-bundle
</VirtualHost>
答え1
私はテストしていませんが、いくつかの(潜在的な)問題を発見しました。
RewriteCond "%{HTTP_HOST}%{REQUEST_URI}" "^domain\.local\/?$"
以前も問題がある可能性があります\
。一般的に改行するので参加する/
理由はありません。REQUEST_URI
RewriteCond
RewriteRule
RewriteRule "^domain\.local\/?$"
ドメインがそこに属していません。一意にRewriteRule
一致しますREQUEST_URI
。https://domain.local
HTTPS 構成に書き換え規則がありません。
答え2
解決策は思ったよりはるかに簡単です。すべてのHTTPをHTTPSにリダイレクトしてから、443仮想ホストで実際の書き換えを処理します。実際のリダイレクトは、443仮想ホストと私が使用した正規表現で発生する必要があると指摘した@Hauke Lagingのおかげで、エラーも発生しました。この記事1回のリダイレクトでhttps、www、末尾のスラッシュを強制する方法読むのも楽しいです。
<VirtualHost *:80>
ServerName domain.local
DocumentRoot "/var/www/html/"
# html directory contains gp directory
<Directory /var/www/html>
Options FollowSymLinks
AllowOverride All
Require all granted
</Directory>
RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
</VirtualHost>
<VirtualHost *:443>
ServerName domain.local
DocumentRoot "/var/www/html/"
RewriteEngine on
RewriteCond "%{HTTP_HOST}%{REQUEST_URI}" "^domain\.local\/?$"
RewriteRule .* https://domain_new.local
SSLEngine on
# html directory contains gp directory
<Directory /var/www/html>
Options FollowSymLinks
AllowOverride All
Require all granted
</Directory>
SSLCertificateFile /etc/pki/tls/certs/domain.local.crt
SSLCertificateKeyFile /etc/pki/tls/private/domain.local.key
SSLCertificateChainFile /etc/pki/tls/certs/domain.local.ca-bundle
</VirtualHost>