我正在使用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中的“公开”?
答案 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]