.htaccess重写https到www,但不是在使用IP地址时

时间:2018-02-13 10:07:36

标签: apache url mod-rewrite https url-rewriting

我的Raspberry Pi上安装了Nextcloud。 Https已设置并且重写引擎已启用。到目前为止,重写也在发挥作用。 现在我遇到了以下问题: 如果我在LAN网络中调用我的云,我必须使用内部IP地址(192.168.1.20)并使用Internet通过浏览器访问云,我设置了一个URL。

为了始终拥有正确的URL,我想使用.htaccess文件(以及稍后的IfModule重写)来重写URL。 应重写以下案例:

http://example.com/xyz -> https://www.example.com/xyz
http://www.example.com/xyz -> https://www.example.com/xyz
http://192.168.1.20/xyz -> https://192.168.1.20/xyz

我对语法不太熟悉,所以我尝试了以下内容但没有成功:

RewriteEngine on

# for URL
RewriteCond %{HTTP_HOST} !^www\.
RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} !^192.168.1.20
RewriteRule ^https://www.example.com%{REQUEST_URI} [R=301,L,NE]

# for IP
#RewriteCond %{SERVER_NAME} ^192.168.1.20
#RewriteCond %{HTTPS} off
#RewriteRule ^https://192.168.1.20%{REQUEST_URI} [R=301,L,NE]

如果有人能帮助我,我会很高兴...

编辑: 我的“000-default.conf”定义是:

<VirtualHost _default_:80>
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html
    ServerName www.example.com
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

<VirtualHost _default_:443>
  DocumentRoot /var/www/html
  ServerName 192.168.1.20
  <IfModule mod_headers.c>
    Header always set Strict-Transport-Security "max-age=15768000; includeSubDomains; preload"
  </IfModule>
  SSLEngine on
  SSLCertificateFile /etc/apache2/ssl/cloud.crt
  SSLCertificateKeyFile /etc/apache2/ssl/cloud.key
</VirtualHost>

我的“default-ssl.conf”定义:

<IfModule mod_ssl.c>
    <VirtualHost _default_:443>
        ServerAdmin webmaster@localhost

        DocumentRoot /var/www/html

        ServerName=www.example.com

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

        SSLEngine on

        SSLCertificateFile  /etc/apache2/ssl/cloud.crt
        SSLCertificateKeyFile   /etc/apache2/ssl/cloud.key

        <FilesMatch "\.(cgi|shtml|phtml|php)$">
                SSLOptions +StdEnvVars
        </FilesMatch>
        <Directory /usr/lib/cgi-bin>
                SSLOptions +StdEnvVars
        </Directory>
    </VirtualHost>
</IfModule>

1 个答案:

答案 0 :(得分:0)

同时我自己解决了这个问题!

存在一些语法错误和一些其他问题。 根目录下的&#34; .htaccess&#34; -file中的以下代码适用于我:

RewriteEngine on

# for URL
RewriteCond %{HTTP_HOST} !^www\. [OR]
RewriteCond %{HTTPS} !=on
RewriteCond %{SERVER_NAME} !^192\.168\.1\.20
RewriteRule .* https://www.example.com%{REQUEST_URI} [R=301,L,NE]

# for IP
RewriteCond %{SERVER_NAME} ^192\.168\.1\.20
RewriteCond %{HTTPS} !=on
RewriteRule .* https://192.168.1.20%{REQUEST_URI} [R=301,L,NE]

唯一剩下的问题是https://example.com未更正为https://www.example.com,但就我而言,这并不重要......