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 덕분에 오류도 발생했습니다. 이 기사한 번의 리디렉션으로 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>