我在.htaccess
上使用了以下代码,将http
和www
的流量重定向到https
。我在我的Laravel
项目中使用了htaccess配置。
我面临的问题是,当我在本地工作时,它会将我重定向到https
域上的.local
。由于无法在本地配置https,因此会出现问题。
那么在本地,生产等多个环境中,将http
和www
重定向到https
的推荐方法是什么。
<IfModule mod_rewrite.c>
# Redirect everything to https
RewriteEngine On
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} ^www\. [NC]
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]
RewriteRule ^ https://%1%{REQUEST_URI} [L,NE,R=301]
</IfModule>
答案 0 :(得分:1)
RewriteCond是您的“如果条件”。只需在
之后添加RewriteCond %{HTTPS} off [OR]
RewriteCond %{REMOTE_ADDR} !127.0.0.1
RewriteCond %{HTTP_HOST} !localhost
答案 1 :(得分:0)
在app/Providers/AppServiceProvider.php
中,您可以强制所有路由或资产链接到https:
if (config('app.env') === 'production') {
URL::forceScheme('https');
}
然后创建一个中间件来强制所有请求保护请求的安全:
php artisan make:middleware SecureSite
在SecureSite.php
文件夹中打开app/Http/Middleware
并覆盖handle()
函数:
public function handle($request, Closure $next)
{
if (config('app.env') === 'production' && !$request->isSecure()) {
return redirect()->secure($request->getRequestUri());
}
return $next($request);
}
然后在app/Http/Kernel.php
中将其首先添加到$middlewareGroups
下的web
中:
protected $middlewareGroups = [
'web' => [
\App\Http\Middleware\SecureSite::class,
...
然后确保您的所有web.php
路由都具有web
中间件:
php artisan route:list
无需还原.htaccess
,如果要还原,here是原始的.htaccess
。
答案 2 :(得分:0)
如下更新了.htaccess
,它现在可以工作了。感谢您的帮助。
<IfModule mod_rewrite.c>
# Redirect everything to https
RewriteEngine On
RewriteCond %{HTTPS} off [OR]
RewriteCond %{REMOTE_ADDR} !127.0.0.1
RewriteCond %{HTTP_HOST} !localhost
RewriteCond %{HTTP_HOST} !\.local$
RewriteCond %{HTTP_HOST} ^www\. [NC]
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]
RewriteRule ^ https://%1%{REQUEST_URI} [L,NE,R=301]
</IfModule>