Laravel удаляет public из URL-адреса и принудительно использует https в .htaccess

Как я могу удалить /public/ из URL-адреса и автоматически принудительно перевести 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-адреса и принудительно перевести http на https с помощью .htaccess.


person Teretto    schedule 19.09.2019    source источник
comment
Возможный дубликат Laravel 5 — удалить общедоступный URL-адрес   -  person Script47    schedule 19.09.2019
comment
stackoverflow.com/ вопросы/4398951/   -  person Script47    schedule 19.09.2019
comment
Давайте попробуем решить одну проблему за другой — где вы генерируете свои URL-адреса? Указывает ли ваша конфигурация VHost на корневую папку вашего приложения или на вашу общую папку?   -  person Nico Haase    schedule 26.10.2020


Ответы (4)


Проблема, с которой вы столкнулись, заключается в том, что вы установили корень документа в качестве корня проекта. В конфигурации вашего виртуального хоста apache вам нужно установить корневой каталог документа как общедоступный каталог.

Например:

DocumentRoot /var/www/yourproject/public

Таким образом, public не отображается в URL-адресе.

Если вы используете виртуальный хостинг, вам нужно переместить корень вашего проекта выше public_html/, удалить public_html, а затем переименовать каталог public в public_html. Затем вы можете пойти и изменить файлы начальной загрузки, чтобы использовать этот путь. Вы также можете сделать символическую ссылку.

person ollieread    schedule 19.09.2019
comment
мой хостинг не позволяет изменять настройки apache/nginx. и я не могу удалить папки по умолчанию. Я могу использовать только htaccess - person Teretto; 19.09.2019
comment
Вы не можете удалить public_html? - person ollieread; 19.09.2019

Добавьте эти две строки в файл 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>
person Vaibhavi S.    schedule 19.09.2019

Я думаю, вам нужно включить rewrite_url с помощью

$ sudo a2enmod rewrite

а также

перезапустите сервер апач

$ sudo systemctl restart apache2

Ваш сайт-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.
person Prafulla Kumar Sahu    schedule 19.09.2019
comment
переписать в установленном - person Teretto; 19.09.2019
comment
Корень документа @Teretto также установлен? или вам может понадобиться использовать базу перезаписи в htaccess. - person Prafulla Kumar Sahu; 19.09.2019
comment
Я не могу изменить 000-default.conf на своем хостинге - person Teretto; 19.09.2019
comment
@Teretto, вы можете установить RewriteBase в своем htaccess, это может помочь. - person Prafulla Kumar Sahu; 19.09.2019
comment
Использование @Teretto влияет на настройку SSL? - person Prafulla Kumar Sahu; 19.09.2019
comment
нет автоматического перенаправления на хостинг и локальный хост (в локальном я использую laragon.org) - person Teretto; 19.09.2019

Поместите этот код в файл .htaccess корневого каталога домена для удаления «public»:

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

А для перенаправления на https с http добавьте следующие строки вверху в файле .htaccess, расположенном в публичном каталоге проекта laravel.

RewriteCond %{HTTP_HOST} your_domain\.com [NC]
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.your_domain.com/$1 [R,L]
person Hitesh Chaurasia    schedule 26.10.2020