it-swarm.com.de

htaccess-Weiterleitung für Angular Routen

Ich habe eine angular Anwendung mit mehreren Routen, wie zum Beispiel:

site.com/
site.com/page
site.com/page/4

Im html5-Routing-Modus von angle werden diese Probleme behoben, wenn Sie in der Anwendung auf Verknüpfungen klicken. Bei einer harten Aktualisierung treten jedoch 404-Fehler auf. Um dies zu beheben, habe ich versucht, ein grundlegendes htaccess-Neuschreiben zu implementieren.

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_METHOD} !OPTIONS
RewriteRule ^(.*)$ index.html [L]

Dies funktioniert für die angular -Anforderungen, jedoch, wenn ich versuche, Skripte zu laden oder Ajax-Aufrufe innerhalb meiner Domain zu tätigen, wie zum Beispiel:

<script src="/app/programs/script.js"></script>

Dieses Skript wird nicht geladen - die Anforderung wird umgeleitet, und es wird versucht, die index.html-Seite zu laden, da die .htaccess-Datei der Meinung ist, dass die Anforderung umgeleitet werden sollte.

Kann ich die Anforderung von htaccess nur dann an index.html (mit den Ansichtsparametern) umleiten lassen, wenn es keine tatsächliche Datei gibt, in die sie aufgelöst werden soll?

60
Lucas Penney

Verwenden Sie ein Snippet wie:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]

RewriteRule ^(.*) /index.html [NC,L]

Dies springt zur eigentlichen Ressource (falls vorhanden) und zu index.html für alle AngularJS-Routen.

126
rajasaur

Es gibt ein Problem, wenn die App die Vorlagendatei directive angefordert hat, aber Datei fehlt. In einigen Fällen wurden von der App mehrere Skriptdateien im index.html Angefordert.

wir sollten eine 404 - Antwort anstelle der index.html - Datei senden, wenn die Datei nicht existiert. Also füge ich ein einfaches Regex-Muster hinzu, um fehlende Dateianforderungen zu identifizieren.

RewriteEngine On
# If an existing asset or directory is requested go to it as it is
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -f [OR]
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -d
RewriteRule ^ - [L]

# If the requested pattern is file and file doesn't exist, send 404
RewriteCond %{REQUEST_URI} ^(\/[a-z_\-\s0-9\.]+)+\.[a-zA-Z]{2,4}$
RewriteRule ^ - [L,R=404]

# otherwise use history router
RewriteRule ^ /index.html
20
port115

Die Lösung eines armen Mannes (ohne mod_rewrite):

ErrorDocument 404 /index.html
5
Cito

In meinem Fall erstelle ich eine .htaccess-Datei wie unten

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]

RewriteRule ^(.*) ./index.html [NC,L]

gerade hinzugefügt. vor /index.html und füge diese Datei in meiner Domain hinzu wie https://example.com/subfolder und es funktioniert gut

3

Schauen Sie sich diesen Link an: https://stackoverflow.com/a/49455101/5899936 Create .htaccess Datei im Root-Ordner und füge dies in das .htaccess

 <IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteBase /
  RewriteRule ^index\.html$ - [L]
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule . /index.html [L]
</IfModule>
2
Sumit Jaiswal

Ich werde eine weitere detaillierte htaccess-Datei bereitstellen, falls Sie Folgendes benötigen:

  • Berücksichtigen Sie die baseUrl und die Standardindexdatei
  • Entfernen Sie den führenden Schrägstrich, um: params zu verwalten

Hier ist mein htaccess, sehr nah, aber genauer:

DirectoryIndex index.html
RewriteEngine on
RewriteBase /subDir
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^(.*) index.html [NC,L]
0
andrea06590