Почему происходит перенаправление с example.local на example.local/index.php?

Я установил Laravel и указал путь к папке public, в которой находится файл index.php. Когда я перехожу по адресу example.local, адресная строка показывает example.local/index.php. Я не наблюдаю редирект 302 в разделе Network. 

Основная проблема заключается в том, что ссылки на логин, регистрацию и другие разделы отображаются как: <b><a href="http://example.local/index.php/login" rel="nofollow">example.local/index.php/login</a></b>, и они работают, если открывать их напрямую. Однако, если я пытаюсь открыть <a href="http://example.local/login" rel="nofollow">example.local/login</a>, я получаю ошибку 404 от Nginx.

Вот содержимое файла <b>project.ini</b>: 
<pre><code>[example.local]

php_engine   = PHP-8.3
public_dir   = {base_dir}\my-app\public
node_engine  = Node-20.18.0
nginx_engine = Nginx-1.26</code></pre>

Я также проверил приложение с помощью php artisan serve, и всё работает нормально, следовательно, проблема, скорее всего, связана с настройками Open Server. В чем именно может быть ошибка?
  • 21 октября 2024 г. 16:32
Ответы на вопрос 1
Проблема, с которой вы столкнулись, скорее всего связана с настройками вашего веб-сервера Nginx. Давайте рассмотрим несколько шагов, которые могут помочь решить эту проблему.

1. **Проверьте конфигурацию Nginx**: Убедитесь, что ваша конфигурация Nginx правильно настроена для Laravel. Например, вам нужно убедиться, что вы используете правильные правила переадресации и обработки запросов. Вот пример конфигурации Nginx для Laravel:

   ```nginx
   server {
       listen 80;
       server_name example.local;

       root /path/to/your/my-app/public;  # Измените на правильный путь

       index index.php index.html index.htm;

       location / {
           try_files $uri $uri/ /index.php?$query_string;
       }

       location ~ \.php$ {
           include snippets/fastcgi-php.conf;
           fastcgi_pass unix:/var/run/php/php8.3-fpm.sock;  # Измените на актуальный путь к PHP FPM
           fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
           include fastcgi_params;
       }

       location ~ /\.ht {
           deny all;
       }
   }
   ```

2. **Использование `try_files`**: Убедитесь, что в блоке `location /` используется директива `try_files`, как показано выше. Это гарантирует, что любые обращения к несуществующим файлам будут перенаправлены на `index.php`, что является частью обработки маршрутов в Laravel.

3. **Переход по корню сайта**: Таким образом, когда вы обращаетесь к `example.local`, Nginx будет обрабатывать запрос через `index.php`, не добавляя его в адресную строку, и Laravel будет отвечать за маршрутизацию запроса.

4. **Проверьте ваш файл настроек проекта**: Убедитесь, что путь к `public_dir` указан правильно и соответствует фактическому пути до вашей папки `public`.

5. **Проверка .htaccess (если используется)**: Если вы используете Apache, в вашем проекте может быть файл `.htaccess`, который отвечает за переадресацию. Однако, Nginx не использует .htaccess, поэтому важно, чтобы настройки конфигурации в Nginx были установлены правильно.

6. **Плюс проверьте кэш**: Если вы внесли изменения в конфигурацию, не забудьте перезагрузить Nginx и очистить кэш Laravel с помощью команды `php artisan cache:clear` или `php artisan config:clear`.

После внесения всех изменений и перезапуска Nginx, попробуйте снова обратиться к `example.local` и проверьте, исчезла ли проблема с перенаправлением на `example.local/index.php`.
Похожие вопросы