无法将子目录重定向到ssl

时间:2016-10-20 04:05:04

标签: wordpress .htaccess mod-rewrite

为什么这个.htaccess不会强制所有子目录使用SSL?

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L]

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

我的特定用例:我在一个子目录中安装了WordPress,我正在使用mod_rewrite来“隐藏”来自我的网站访问者的文档(文档存储在example.com/wordpress中,但似乎是浏览器为example.com)。一切都很好。我根据无数帖子中的说明添加了HTTPS重写。但是当我浏览example.com/nextcloud时,所有文件都通过HTTP提供!

我的.htaccess子目录中有/nextcloud个文件。与mod_rewrite有关的唯一部分如下:

  RewriteEngine on
  RewriteRule .* - [env=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
  RewriteRule ^\.well-known/host-meta /public.php?service=host-meta [QSA,L]
  RewriteRule ^\.well-known/host-meta\.json /public.php?service=host-meta-json [QSA,L]
  RewriteRule ^\.well-known/carddav /remote.php/dav/ [R=301,L]
  RewriteRule ^\.well-known/caldav /remote.php/dav/ [R=301,L]
  RewriteRule ^remote/(.*) remote.php [QSA,L]
  RewriteRule ^(?:build|tests|config|lib|3rdparty|templates)/.* - [R=404,L]
  RewriteCond %{REQUEST_URI} !^/.well-known/acme-challenge/.*
  RewriteRule ^(?:\.|autotest|occ|issue|indie|db_|console).* - [R=404,L]

我只对.htaccess文件有非常基本的了解,但我的理解是它自上而下(.htaccess在子目录中可以覆盖更高目录的设置)除了 for mod_rewrite,这是一种特殊情况,以相反的方式工作(最顶层的目录优先)。

如果我的理解是真的,为什么我的代码不起作用?

1 个答案:

答案 0 :(得分:0)

/.htaccess中,将其添加到所有其他条件/规则之上:

RewriteRule ^nextcloud(?:$|/) - [L]

这会阻止WordPress获取请求。

/nextcloud/.htaccess中,设置

RewriteBase /nextcloud/

此外,您的根目录不应该只是/,因为那是WordPress的公共路径吗?静态文件如何正确路由?例如。 example.com/real/file如何到达example.com/wordpress/real/file