Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Laravel 拉雷维尔:如何强制HTTPS?_Laravel_.htaccess_Mod Rewrite_Https_Laravel 5.4 - Fatal编程技术网

Laravel 拉雷维尔:如何强制HTTPS?

Laravel 拉雷维尔:如何强制HTTPS?,laravel,.htaccess,mod-rewrite,https,laravel-5.4,Laravel,.htaccess,Mod Rewrite,Https,Laravel 5.4,我开始开发一个新的大型应用程序,这次我使用了Laravel,这是第一次 我需要强制所有页面使用HTTPS,这并不重要,无论是通过代码还是通过.htaccess,但我找不到简单的教程 官方文件没有谈到这个问题 有关信息,我的acutal.htaccess是 <IfModule mod_rewrite.c> <IfModule mod_negotiation.c> Options -MultiViews </IfModule>

我开始开发一个新的大型应用程序,这次我使用了Laravel,这是第一次

我需要强制所有页面使用HTTPS,这并不重要,无论是通过代码还是通过.htaccess,但我找不到简单的教程

官方文件没有谈到这个问题

有关信息,我的acutal.htaccess是

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews
    </IfModule>

    RewriteEngine On

    # Redirect Trailing Slashes If Not A Folder...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)/$ /$1 [L,R=301]

    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]

    # Handle Authorization Header
    RewriteCond %{HTTP:Authorization} .
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
</IfModule>

选项-多视图
重新启动发动机
#如果不是文件夹,则重定向尾部斜杠。。。
重写cond%{REQUEST_FILENAME}-D
重写规则^(.*)/$/$1[L,R=301]
#处理前控制器。。。
重写cond%{REQUEST_FILENAME}-D
重写cond%{REQUEST_FILENAME}-F
重写规则^index.php[L]
#句柄授权头
RewriteCond%{HTTP:Authorization}。
重写规则。*-[E=HTTP\U授权:%{HTTP:AUTHORIZATION}]

我的问题是针对Laravel5的,因为我不知道在哪里以及如何修改这个.htaccess文件。我还想问你,这是否是Laravel的正确方式,或者Laravel是否有特定的设置来处理HTTPs

所以请不要结束我的问题,试着更坚持拉威尔的特定主题

如果您可以发布一个简单的方法来修改此文件和/或在Laravel配置中修改什么以正确处理https


但简而言之,是的,我想强制每个呼叫通过HTTPS传输。

尝试将此代码添加到.htaccess文件中

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

您需要将其添加到
.htaccess
文件中:

RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://YOURWEBSITEDOMAIN/$1 [R,L]
见此:
您可以先在这里搜索。对于同一个问题,有很多问题都有答案

这对我有用

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

重新启动发动机
重写规则^(.*)$public/$1[L]
重写cond%{HTTPS}=在…上
重写规则^https://%{HTTP\u HOST}%{REQUEST\u URI}^公共[L,R=301]

通过以下方式更改.htaccess中的域:

重写cond%{HTTP_HOST}mydomain.com[NC]

重写规则^(.*)$$1[R,L]

<IfModule mod_rewrite.c>
  <IfModule mod_negotiation.c>
      Options -MultiViews
  </IfModule>

  RewriteEngine On

  # Added to Force HTTPS
  RewriteCond %{HTTP_HOST} mydomain\.com [NC]
  RewriteCond %{SERVER_PORT} 80
  RewriteRule ^(.*)$ https://mydomain/$1 [R,L]

  # Redirect Trailing Slashes If Not A Folder...
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule ^(.*)/$ /$1 [L,R=301]

  # Handle Front Controller...
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteRule ^ index.php [L]

  # Handle Authorization Header
  RewriteCond %{HTTP:Authorization} .
  RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
</IfModule>

选项-多视图
重新启动发动机
#添加到强制HTTPS
重写cond%{HTTP_HOST}mydomain\.com[NC]
重写cond%{SERVER_PORT}80
重写规则^(.*)$https://mydomain/$1[R,L]
#如果不是文件夹,则重定向尾部斜杠。。。
重写cond%{REQUEST_FILENAME}-D
重写规则^(.*)/$/$1[L,R=301]
#处理前控制器。。。
重写cond%{REQUEST_FILENAME}-D
重写cond%{REQUEST_FILENAME}-F
重写规则^index.php[L]
#句柄授权头
RewriteCond%{HTTP:Authorization}。
重写规则。*-[E=HTTP\U授权:%{HTTP:AUTHORIZATION}]

当您希望使用https呈现所有URL时,最简单的方法是 在
app/Providers/AppServiceProvider.php的
boot()
函数中使用以下代码:

\URL::forceScheme('https');
尝试从更改.env文件中的“应用程序URL

APP_URL = http://example.com


将其添加到AppServiceProvider中的引导方法

if($this->app->environment('production'))
{
   $this->app['request']->server->set('HTTPS','on');
}
这对我很有用:

# Check if HTTPS is enabled
#RewriteCond %{HTTPS} ^on$ [NC]
#RewriteCond %{QUERY_STRING} !https-is-on [NC]
#RewriteRule (.*) /?https-is-on [R,L]

# Redirect all HTTP to HTTPS requests
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L]

# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} (.+)/$
RewriteRule ^ %1 [L,R=301]

# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]

# Remove index.php from the url
RewriteCond %{THE_REQUEST} ^GET.*index\.php [NC]
RewriteRule (.*?)index\.php/*(.*) /$1$2 [R=301,NE,L]

这是我的配置,与主题中的其他配置一起,我有一个循环重定向

(同时将www重定向到不带www)


在htaccess文件中超过此代码

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

重新启动发动机
重写cond%{HTTPS}=在…上
重写规则^https://%{HTTP_HOST}%{REQUEST_URI}[L,R=301]
重写规则^(.*)$public/$1[L]

您的意思是将所有HTTP方法重定向到HTTPS?可能与否决此方法的人重复?Sandeesh这是针对laravel htaccess的,您需要以一种不会与“laravel前端控制器”冲突的方式编写规则。“我的问题针对laravel 5”-不过,如果您正在寻找
.htaccess
解决方案,则这不是针对laravel的。如果它是特定于任何内容的,那么它是特定于服务器以及SSL证书的管理方式(例如SSL代理等)。此外,您的规范主机名(www与非www)以及是否要实现HST也可以决定如何实现。如果使用
.htaccess
,则相同的原则适用于所有使用
.htaccess
的应用程序。。。WordPress、Joomla、Drupal等。通常,HTTP到HTTPS重定向需要放在
.htaccess
文件的顶部。抱歉,我需要一些特定于Laravel设置的内容。在哪里?Laravel不需要一些特定的配置吗?带有“Where?”我的意思是:在我的.htaccess的哪个点?还有,是你的代码更好,还是Pandhi Bhumik的答案更好?@realtebo在最后一个标签之前,它的意思是:()我用这个代码作为我的网站的答案很棒!像符咒一样对我排序“在最后一个标记之前它的意思是:(
)”-这是不正确的。如果将此规则放在末尾“在最后一个标记之前”,则只会对对静态资源的请求进行处理。通过Laravel路由的URL将不会被重定向。此规则需要放在文件顶部附近(逻辑上,在
RewriteEngine On
指令之后)。在哪里?Laravel需要一些特定的配置吗?你需要将它添加到.htaccess文件中,没有Laravel不需要特定的配置。另外:是你的代码更好,还是来自Mortadda Jafar答案的代码更好?@realtebo这可以说是更好的解决方案,尽管你可能不会注意到任何区别,但另一个代码使用302(临时)重定向,与301(永久)重定向相反。HTTP到HTTPS重定向应该是301。这段代码使用了一个更高效的正则表达式,并且不会对
RewriteRule
模式的捕获反向引用进行回复,因此在更多情况下(其他目录、服务器配置等)不会发生更改。它还会重定向到同一主机名(如果实现HSTS,这是一项要求),但如果不重定向,则可能会导致不必要的额外重定向。您到底想修复/实现什么?此配置用于什么?只有在SSL代理之后,您才会使用这些指令-这在问题中没有提到。最后一个
RewriteRule
指令的格式不正确,可能无法按预期工作(它将触发500
# Check if HTTPS is enabled
#RewriteCond %{HTTPS} ^on$ [NC]
#RewriteCond %{QUERY_STRING} !https-is-on [NC]
#RewriteRule (.*) /?https-is-on [R,L]

# Redirect all HTTP to HTTPS requests
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L]

# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} (.+)/$
RewriteRule ^ %1 [L,R=301]

# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]

# Remove index.php from the url
RewriteCond %{THE_REQUEST} ^GET.*index\.php [NC]
RewriteRule (.*?)index\.php/*(.*) /$1$2 [R=301,NE,L]
RewriteEngine On



RewriteBase /
#redirect from www to non-www(https)
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
RewriteCond %{HTTPS} off
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [L,R=301]

# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]

# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
<IfModule mod_rewrite.c>
    RewriteEngine On        
    RewriteCond %{HTTPS} !=on    
    RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
    RewriteRule ^(.*)$ public/$1 [L]
</IfModule>