我有以下.httaccess
从HTTP页面重定向到HTTPS,但它显然不像预期的那样工作:
RewriteEngine On
# If an existing asset or directory is requested go to it as it is
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -f [OR]
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -d
RewriteRule ^ - [L]
RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} (www.)?myuniversity.ro
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
# If the requested resource doesn't exist, use index.html
RewriteRule ^ /index.html
问题是,当我输入我的实际网站,如:
http://www.myuniversity.ro,它会自动转到http://www.myuniversity.ro/home,就像它应该怎么做,但刷新后去HTTPS,有没有办法从第一次尝试进入HTTPS ?
我的意思是,直接从http://www.myuniversity.ro到https://www.myuniversity.ro/home不需要刷新?
我的路由配置:
const routes: Routes = [
{ path: '', redirectTo: '/home', pathMatch: 'full' },
{ path: 'home', component: HomeComponent }
];
你不应该在angular中处理http到https的重定向。这会使您的服务器不安全。因为api没有使用angular,所以assets等
请检查一下这是否适用于您
RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP_HOST} www.domain.de [NC]
RewriteRule ^(.*)$ https://www.domain.de%{REQUEST_URI} [R=301,L]
。为什么在angular中使用重定向到home,而不使用"path"来显示home组件?想想看。我想最好是在搜索引擎中有域名,而不是这个"主页"的东西。
# If an existing asset or directory is requested go to it as it is RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -f [OR] RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -d RewriteRule ^ - [L] RewriteCond %{HTTPS} off RewriteCond %{HTTP_HOST} (www.)?myuniversity.ro RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
你把这两条规则的顺序搞错了。HTTP到HTTPS的重定向没有被处理。HTTP到HTTPS的重定向应该放在第一位。目前,第一条规则阻止了当请求的URL映射到文件或目录时进行进一步处理。请求根文件(例如:http://www.myuniversity.ro
)为目录。在这种情况下,.htaccess
中的HTTP到HTTPS重定向甚至不被处理。
Aside:是否需要检查HTTP到HTTPS重定向中请求的主机名?您是否托管多个域名,而有些域名您不想重定向?尽管由于正则表达式不是锚定的,您可能会匹配太多。如。foomyuniversity.ro
也符合你的条件。