Слушай, если ты видишь yourdomain.com/public, это не баг. Это Laravel так говорит: «Эй, ты дебил, смотри, я тут стою, и не хочу, чтобы ты лазил по своим файлам, делай через public». Но в продакшне это выглядит как-то… дико.
Есть три пути убрать этот public, и каждый из них либо требует мозгов, либо терпения.
1. Apache
Самый простой вариант, если ты на Apache и у тебя доступ к конфигам:
<VirtualHost *:80>
ServerName yourdomain.com
DocumentRoot /path/to/laravel/public
<Directory /path/to/laravel/public>
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
Главное — не забудь перезапустить Apache:
sudo service apache2 restart
Если не перезапустишь, то все твои изменения просто проигнорируются, и ты будешь злиться на пустое место.
2. Nginx
Если Nginx — то ситуация чуть сложнее, но всё равно терпимо:
server {
listen 80;
server_name yourdomain.com;
root /path/to/laravel/public;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.(?!well-known).* {
deny all;
}
}
После правки — перезагружаем:
sudo service nginx restart
И да, не пытайся сэкономить на пути к public. Если он не точный, Nginx просто отдаст 404 и посмеется в твою сторону.
3. .htaccess
Если у тебя нет доступа к конфигам сервера, можно сделать через .htaccess. Да, это уродливо, но работает:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^(.*)$ public/$1 [L]
</IfModule>
Минус в том, что модуль mod_rewrite должен быть включен. И в некоторых конфигурациях это может выстрелить тебе в ногу. Реально — метод для локалки или если сервер под контролем «не твоей» хостинг-компании.
Почему это важно
Потому что yourdomain.com/public выглядит как любительский проект. В реальной жизни никто не будет уважать твой код только за то, что ты на Laravel. Убираешь public — выглядит цивильно.
Итог
- Apache — меняешь
DocumentRoot, перезапускаешь. - Nginx — точный путь к public, перезапуск, проверка PHP-FPM.
.htaccess— только если ты на шаред-хостинге и другого выхода нет.
0 комментариев