1

如何从 url 中删除 /public/ 并自动强制 http 到 https?

我的根 .htaccess(我创建了它)

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

public/.htaccess (默认 laravel)

<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>

但它不起作用 - 没有自动 http 到 https 重定向。

所以我需要结合从 url 中删除公用文件夹并使用 .htaccess 强制 http 到 https

4

4 回答 4

0

将这两行添加到您的公共文件夹htaccess文件中

 RewriteCond %{HTTPS} !=on
 RewriteRule .* https://yourdomain.com%{REQUEST_URI} [R,L]

您的完整代码public/.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]

    RewriteCond %{HTTPS} !=on
    RewriteRule .* https://yourdomain.com%{REQUEST_URI} [R,L]
</IfModule>
于 2019-09-19T10:01:37.717 回答
0

将此代码放在域根目录的 .htaccess 文件中以删除 'public :

RewriteEngine On
RewriteCond %{REQUEST_URI} !^/public/
RewriteRule ^(.*)$ /public/$1 [L,QSA]

对于从 http 重定向到 https,在 laravel 项目的公共目录中的 .htaccess 文件的顶部添加以下行。

RewriteCond %{HTTP_HOST} your_domain\.com [NC]
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.your_domain.com/$1 [R,L]
于 2020-10-26T11:43:56.870 回答
0

我认为您需要启用 rewrite_url

$ sudo a2enmod rewrite

重启你的 apache 服务器

$ sudo systemctl restart apache2

您的 site-enabled/000-default.conf

 DocumentRoot /var/www/html/yourapp/public

也许你可以使用

RewriteBase "yourapp/public/"

或参考这个答案。

Rename server.php in your Laravel root folder to index.php
Copy the .htaccess file from /public directory to your Laravel root folder.
于 2019-09-19T09:54:37.523 回答
0

您遇到的问题是您已将文档根目录设置为项目的根目录。在您的 apache 虚拟主机配置中,您需要将文档根目录设置为公共目录。

例如:

DocumentRoot /var/www/yourproject/public

这样,公共就不会出现在 URL 中。

如果您使用的是共享主机,您需要将项目的根目录移到上面public_html/,删除public_html,然后将您的public目录重命名为public_html. 然后,您可以修改引导文件以使用此路径。您也可以对其进行符号链接。

于 2019-09-19T09:57:03.033 回答