Laravel使用.htaccess

时间:2018-06-28 14:05:33

标签: laravel .htaccess

我正在使用Laravel 5.5。

Laravel有几个.htaccess,在我的情况下,我正在公共文件夹的根目录和内部使用.htaccess。

一直以来,我一直在.htaccess根目录中使用以下代码来设置公用文件夹:

RewriteEngine On

RewriteRule ^(.*)$ public/$1 [L]

,进入主页后,我的网站正在加载。 之后,我想强制使用https重定向所有页面。因此,首先,当我尝试将此代码放入根.htaccess内时,它什么也没做。它会继续加载http。

RewriteEngine On

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

这很有意义,因为当我设置公用文件夹时,我必须将重定向放入位于公用文件夹内的.htaccess中。

好的,所以我现在尝试这样:

.htaccess根目录:

RewriteEngine On

RewriteRule ^(.*)$ public/$1 [L]

公共.htaccess

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

    RewriteEngine On

    # 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]
</IfModule>

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

此组合有效。它确实重定向到https。 但是,现在有一个问题。当我进入首页或从搜索结果中打开网站时,URL如下所示:

https://mywebsite.com/public/en

当我进入其他页面时,没有与URL中的“公共”路径相关的问题。因此,假设我要打开联系人页面,URL为https://mywebsite.com/en/contact。很好。

进入首页后,如何避免URL中的“公开”?

2 个答案:

答案 0 :(得分:1)

这应该从网址中删除public。

RewriteRule ^(.*)$ public/$1 [L]

我不确定是否应该超过

# Handle Front Controller... 

还是在其中?也许尝试任何一个,看看是否可行?

# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ public/$1 [L]
RewriteRule ^ index.php [L]

答案 1 :(得分:1)

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

source