it-swarm.com.de

URL-Umschreibung: css, js und Bilder werden nicht geladen

Ich habe folgende Regel für .htaccess

Options +FollowSymLinks

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} -f [OR]

RewriteRule ^detail/([0-9]+)/?$ detail.php?id=$1

Es leitet http://localhost/detail/123 URL zu http://localhost/detail.php?id=123 um. Die Seite wird erfolgreich umgeleitet, das Problem ist jedoch, CSS, JS, and images wird nicht geladen.

CSS, js-Dateien befinden sich unter http://localhost/css/ und http://localhost/js/

Eine Lösung ist die Verwendung von absoluter Pfad (ex/CSS oder/js anstelle von nur CSS /,/js, aber dies scheint keine zuverlässige Lösung zu sein, da wir es bei allen Dateien ändern müssen.

Jede andere Lösung basierend auf .htaccess-Regeln, die unabhängig von der Bearbeitung aller PHP -Dateien ist und "relative Pfade" verwenden soll? 

19
Bhavesh Gangani

Seien Sie nicht faul und ändern Sie Ihre relativen URIs in Ihren Ressourcen. Das ist das beste.

Sie können clever werden und Regex verwenden und alle benötigten Dateien ersetzen, die wie ein paar Einzeiler wären, und schon sind Sie fertig. Wie viele Orte könnte es geben, um sich zu verändern? Und Sie sollten eine Vorlage verwenden.

Das sollte funktionieren, aber ich würde diesen Weg nicht gehen.

RewriteRule ^detail/(css|js|img)/(.*)?$ /$1/$2 [L,QSA,R=301]

17

eine Lösung ist die Verwendung eines absoluten Pfads (ex/css oder/js anstelle von nur css /,/js. Dies ist jedoch keine verlässliche Lösung, da wir alle Dateien ändern müssen

Dies liegt daran, dass die Basis Ihrer relativen URIs geändert wurde. Ursprünglich ist die Basis /, wenn die Seite /detail.php?id=123 ist und der Browser die relativen Links zur /-Basis korrekt ausfüllt. Wenn der Browser jedoch zu einer Seite wie /detail/123 wechselt, wird aus der Basis plötzlich /detail/ und versucht, diese vor allen relativen URLs anzuhängen, sodass keine von ihnen geladen wird.

Sie können Ihre Links entweder absolut machen oder die URI-Basis in der Kopfzeile Ihrer Seiten ändern (zwischen den <head> </head>-Tags):

<base href="/">
20
Jon Lin

Ich habe ein Url-Rewriting für ein Projekt in Core PHP angewendet. Ich hatte das gleiche Problem. CSS, Js und Bilder wurden nicht geladen. Ich habe das benutzt und es hat für mich funktioniert. Quelle

# Allow any files or directories that exist to be displayed directly
RewriteCond ${REQUEST_URI} ^.+$
RewriteCond %{REQUEST_FILENAME} \.(gif|jpe?g|png|js|css|swf|php|ico|txt|pdf|xml)$ [OR]
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -l
RewriteRule ^ - [L]
5
Sajal

Die Antwort von Anthony ist vollkommen gültig, und er versucht tatsächlich, einige gute Praktiken dort zu vermitteln.

Da Sie mit dieser Antwort jedoch nicht zufrieden zu sein scheinen, finden Sie hier eine andere Lösung. Fügen Sie einfach diese Zeile in Ihren .htaccess ein, bevor Sie einen Rewrite-Befehl ausführen:

RedirectMatch permanent ^/detail/((css|js)/.*)  /$1

Alle ursprünglich 404-Anfragen nach /details/css/style.css und /details/js/js.s werden an ihren tatsächlichen Standort umgeleitet. Weder besonders schön noch elegant, aber es funktioniert einfach.

1
Perleone

dieser Code funktioniert perfekt für mich. Fügen Sie vor der Weiterleitungsregel (RewriteRule ^ detail/([0-9] +) /? $ detail.php? id = $ 1) 

RewriteRule ^(.+)/(admin|css|fonts|ico|include|js|images)/(.*)$ $2/$3 [L]
0
danu