Как заставить URL переписать для работы в Laravel 5? - PullRequest
0 голосов
/ 07 сентября 2018

Мне не удается заставить работать любую маршрутизацию Laravel, кроме базового URL и файлов в папке /site/public/.

http://testurl/ (устанавливается через Apache vhost) работает и загружает домашнюю страницу.

http://testurl/blog) не работает (возвращает 404), но мне бы хотелось.

Странно, http://testurl/index.php/blog работает .

Я гуглил в сотне разных мест и просмотрел бесчисленное множество вопросов StackOverflow и перепробовал все, что смог найти, но ничего не помогло.

Как я могу это исправить?


Информация о конфигурации

Я использую Laravel 5.7 на Apache 2.4.29 и PHP 7.1.9 на MacOSX 10.13.4.

Я включил модуль перезаписи в httpd.conf примерно так:

LoadModule rewrite_module libexec/apache2/mod_rewrite.so
...
<Directory />
    AllowOverride all
    Require all denied
</Directory>

Мой httpd-vhosts.conf настроен так:

<VirtualHost *:80>
    DocumentRoot "/Library/WebServer/Documents/site/public"
    ServerName testurl
    <Directory /Library/WebServer/Documents/site/public>
            Order Allow,Deny
            Allow from all
    </Directory>
</VirtualHost>

.htaccess в папке /site/public/ выглядит следующим образом (я бы не хотел это менять):

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

My config/app.php имеет следующую строку:

'url' => env('APP_URL', 'http://testurl'),

И последнее, но не менее важное: web.php выглядит так:

<?php

Route::get('/', function () {
    return view('home');
});
Route::get('blog', function () {
    return view('blog');
}); 

Если есть что-то, чего мне не хватает (или что я могу попробовать), пожалуйста, дайте мне знать.

Желательно, чтобы я хотел решения, которые не требуют от меня изменения кода Laravel при развертывании на сервере.

Спасибо за помощь!

1 Ответ

0 голосов
/ 07 сентября 2018

После МНОГО поиска я нашел этот вопрос , и он помог мне найти ответ.

Все, что мне нужно было сделать, это добавить AllowOverride All в мой httpd-vhosts.conf файл следующим образом:

<VirtualHost *:80>
    DocumentRoot "/Library/WebServer/Documents/site/public"
    ServerName testurl
    <Directory /Library/WebServer/Documents/site/public>
            AllowOverride All
            Order Allow,Deny
            Allow from all
    </Directory>
</VirtualHost>

Это исправило проблему, и теперь все загружается правильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...