it-swarm.dev

CSS wird nach der Umleitung mit der htaccess-Umschreibregel nicht geladen

Ich habe die folgende Kurzanleitung für eine Benutzerprofil-URL

RewriteRule ^(\w+)/?$ ./profile.php?name_of_user=$1

Die Site ist mit der entsprechenden CSS-Datei gestaltet, wenn ich site.com/name_of_user

aber nicht, wenn ich site.com/name_of_user/

Obwohl die Weiterleitung auf der richtigen Seite ist ...

Hilfe wird geschätzt!

15

sie können dies am einfachsten beheben, indem Sie den vollständigen Pfad zu Ihrer CSS-Datei im <head> der HTML-Datei angeben.

Wenn Ihre Regel "mod_rewrite" den Pfad ändert, in dem sich Ihre CSS-Datei befindet, sollten Sie dies auch vor Ihrer RewriteRule platzieren:

RewriteCond %{REQUEST_FILENAME} !-f

Dadurch wird sichergestellt, dass die Anforderung vor dem erneuten Schreiben nicht mit einer Datei übereinstimmt.

22
Steve Lewis

Ich hatte das gleiche Problem und habe die einfachste und praktischste Lösung gefunden.

<base href="http://www.example.com/" />

Es ist super sauber und einfach zu bedienen.

12
Query

verknüpfen Sie die CSS-Dateien relativ zum Stammverzeichnis . Beispiel:

<link rel="stylesheet" type="text/css" href="/css/****.css">
11

Wenn Ihre Seiten-URL example.com/name_of_user/ ist, kann das Laden der Ressource css/js/images Probleme verursachen, wenn Ihre HTML-Seite relative Pfade für diese Ressourcen verwendet. Der Browser löst Ressourcen-URLs mit der aktuellen URL auf.

Wenn zum Beispiel ein Style-Tag lautet:

<link rel="stylesheet" type="text/css" href="static/style.css">

und Ihre aktuelle Seiten-URL lautet:

http://example.com/name_of_user/

Der Browser löst dann die css-URL als example.com/name_of_user/static/style.css anstelle von example.com/static/style.css auf. Dies führt zu 404 für Ressourcen-URLs und Ihre Seite wird ohne Stil, Skripts und Bilder angezeigt.

Sie können dieses Problem auf eine der folgenden Arten lösen:

  1. Verwenden Sie den absoluten Pfad in Ihren CSS-, Js-, Image-Dateien und nicht in einem relativen. Das bedeutet, dass Sie sicherstellen müssen, dass der Pfad dieser Dateien entweder mit http:// oder einem Schrägstrich / beginnt.

  2. Andernfalls Sie können diesen nur unterhalb <head>-Abschnitt des HTML-Codes Ihrer Seite hinzufügen: 

    <base href="/" />
    

damit jede relative URL von dieser Basis-URL und nicht von der URL der aktuellen Seite aufgelöst wird.

7
anubhava

Versuchen Sie, in Ihrem html-Dokumentenkopf die rechte Basis festzulegen:

<head>
  <base href="http://example.com/">
<head>

Durch zusätzliche Schrägstriche (/) in Ihren .htaccess-Regeln wird der externe Quellenpfad in Ihren HTML-Dokumenten nicht geändert. Die folgende Regel

RewriteEngine On
RewriteBase /
RewriteRule ^(\w+)/?$ ./profile.php?name_of_user=$1 

dieses Verhalten wird nicht mit <base href="http://example.com/"> im Dokument <head>. des Dokuments ausgeführt. Es funktioniert gut, insbesondere für relative Dateistrukturen.

6
uxmal

Versuche dies:

<IfModule mod_rewrite.c>
    RewriteEngine On

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)\.(gif|jpg|png|jpeg|css|js|swf)$ /public/$1.$2 [L,NC]

    # Removes index.php from ExpressionEngine URLs  
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ /index.php/$1 [L,QSA]

</IfModule>
2
Thanh Siel

Der einfachste Weg ist die Verwendung von <base href="site url here">, und dies sollte kurz nach dem head-Tag des öffnenden HTML-Tags erfolgen. Wenn Sie sich auf localhost befinden, verwenden Sie beispielsweise http 

http://localhost/road/ 
1
RewriteCond %{REQUEST_FILENAME} !-f

Das funktioniert wie ein Genuss. Ich hatte ursprünglich Probleme, sogar absolute Verknüpfungen zu geben. Danke und +1 an Steve Lewis.

1

Wenn Sie diesen site.com/name_of_user/ verwenden, ändern Sie das Arbeitsverzeichnis auf Ihrer Site von root in name_of_user. Daher wird der relative Pfad für jede Datei oder jeden Link auf der angeforderten Seite /name_of_user/ anstelle von /.

Um dies zu beheben, müssen Sie .htaccess eine zusätzliche Regel hinzufügen:

RewriteRule ^name_of_user/(.*)?$ $1
0
razzak

Fügen Sie einfach den Basispfad nach dem öffnenden Head-Tag hinzu. Zum Beispiel:

<base href="website url here">
0
Ahmad Lone

Ich hatte scheinbar das gleiche Problem. Ich habe versucht, von einer Site der Form umzuleiten: Www.foo/category/details.

Ich fand den Schrägstrich nach "category", sodass CSS und Bilder nicht geladen wurden.

Ursache ist, dass die Standardumleitung die ursprüngliche URL an den Browser weiterleitet. Dies ist aus einem JScript-Trace in window.location.pathname ersichtlich. Die Lösung besteht einfach darin, ein [R] -Flag in der Umschreibregel zu verwenden.

0
John McMillan