为什么这个.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
,这是一种特殊情况,以相反的方式工作(最顶层的目录优先)。
如果我的理解是真的,为什么我的代码不起作用?
答案 0 :(得分:0)
在/.htaccess
中,将其添加到所有其他条件/规则之上:
RewriteRule ^nextcloud(?:$|/) - [L]
这会阻止WordPress获取请求。
在/nextcloud/.htaccess
中,设置
RewriteBase /nextcloud/
此外,您的根目录不应该只是/
,因为那是WordPress的公共路径吗?静态文件如何正确路由?例如。 example.com/real/file
如何到达example.com/wordpress/real/file
?