apache只用http而不是https更改为尾部斜杠

时间:2015-01-05 03:14:52

标签: apache mod-rewrite

到目前为止,我已经尝试了大约10个解决方案,几乎所有的serverfault和stackoverflow相关的问题。丢了一些头发等。

我的网站曾是http://example.com 现在是https://example.com

http://example.com/filename.html的所有链接 转入https://example.com/filename.html

http://example.com/directory的所有链接 转到https,然后添加斜杠:https://example.com/directory/

https://example.com/directory 还会添加斜杠https://example.com/directory/

http://example.com/directory/

所有链接(这是我的大部分外部信息链接)

404!

这是我对default.conf的最新尝试

<VirtualHost *:80>
        ServerAdmin support@example.com

        DocumentRoot /srv/www/example.com/public_html/
        RewriteEngine On
        RewriteCond %{HTTPS} off
        RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L,NC,R=301]

        <Directory />
                Options +FollowSymLinks
                AllowOverride None
        </Directory>
        <Directory /srv/www/example.com/public_html/>
                Options -Indexes +FollowSymLinks
                AllowOverride None
                Order allow,deny
                allow from all
        </Directory>

        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
        <Directory "/usr/lib/cgi-bin">
                AllowOverride None
                Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
                Order allow,deny
                Allow from all
        </Directory>

        ErrorLog /srv/www/example.com/logs/error.log
        LogLevel warn
        CustomLog /srv/www/example.com/logs/access.log combined env=!dontlog
</VirtualHost>

继承我ssl.conf的开始:

<VirtualHost _default_:443>
        ServerAdmin support@example.com
        ServerName example.com:443
        ErrorDocument 404 /404.php

        DocumentRoot /srv/www/example.com/public_html

        <Directory />
                <IfModule mod_expires.c>
                     ExpiresActive off
                </IfModule>
                Options +FollowSymLinks
                AllowOverride None
        </Directory>
        <Directory /srv/www/example.com/public_html>
                Options -Indexes +FollowSymLinks
                AllowOverride All
                Order allow,deny
                allow from all

                ExpiresActive On
                ExpiresDefault "access plus 12 hours"
                ExpiresByType application/javascript "access plus 10 months"
                ExpiresByType image/jpg "access plus 10 months"
                ExpiresByType image/jpeg "access plus 10 months"
                ExpiresByType image/gif "access plus 10 months"
                ExpiresByType image/png "access plus 10 months"
                ExpiresByType text/css "access plus 10 monthss"
                ExpiresByType image/x-icon "access plus 10 months"
                FileETag MTime Size

2 个答案:

答案 0 :(得分:0)

在非ssl指令中尝试毯子重定向:

<VirtualHost *:80>
ServerName example.com
Redirect permanent / https://example.com/
</VirtualHost>

这应该转发从http://example.comhttps://example.com

的所有内容

答案 1 :(得分:0)

这是一个艰难的问题,我有另一个启用了网站的.conf文件,它将旧的子域重定向到主ssl网站中的文件夹名称。 我遵循的一些教程建议,当我这样做时,我应该使用serverAlias作为主要网站,糟糕的是,apache正在subdomain.conf中指定的重定向,就像它是main-ssl.conf网站一样。线索在日志文件中,404用于:

    /old-subdomain-redirect/browser-Asked-Folder/

所以看起来在另一个.conf文件中使用相同的ServerAlias可以合并指令。

令人困难的是浏览器在没有询问服务器的情况下缓存重定向,所以当我禁用所有其他网站时,我看到了相同的结果: - /