Flutter web 404 без хэша на apache без htaccess

#flutter #apache #dart

Вопрос:

Я пытаюсь включить прямую обработку URL-адресов в своем приложении Flutter. Я использую beamer, и приложение работает, как и ожидалось, с глубокой связью в эмуляторе приложения и при использовании эмулятора веб-браузера chrome через vscode.

Однако, когда я публикую код, работает только главная страница. Прямой доступ к URL-адресу не делает этого.

Когда я переключаюсь обратно на стратегию/#/, все работает, и я могу получить прямой доступ в любое место приложения.

Это означает, что приложение не загружено, и только веб-сервер Apache возвращает 404, потому что он не распознает index.html из файла flutter jS, который должен быть cgi.

Некоторое время назад я работал с php, и был способ получить доступ к URL-адресам без использования расширений и переопределения в настройках httpd.conf.

У кого-нибудь это работает для flutter navigation 2.0, скомпилированной для Интернета на веб-сервере apache?

Спасибо

Ответ №1:

создайте файл .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.html [L]
</IfModule>
 

Отредактируйте httpd.conf для этого корневого каталога:

 DocumentRoot "/Users/myname/myapp/build/web"
<Directory "/Users/myname/myapp/build/web">
          Options FollowSymLinks
          AllowOverride All
          Order allow,deny
          allow from all
</Directory>
 

Посетите: yoursite.com/path/to/flutter/page или где бы у вас ни был анализатор маршрутов

Комментарии:

1. Спасибо. .htaccess работает на меня.