htacess Umleitung zu js & css Dateien
Dies ist meine typische PHP-MVC-Struktur:
-Resources
--/my.css
--/my.js
-Project
--/.htaccess
--/index.php
--/Other Files & Folders
Dies ist meine htaccess-Konfiguration:
Options -Indexes
#AddHandler application/x-httpd-php53 .php .php5 .php4 .php3
RewriteEngine on
# Rewrite URLs of the form 'x' to the form 'index.php?q=x'.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteCond %{REQUEST_URI} !\.(?:css|js|jpe?g|gif|png)$ [NC] RewriteRule ^(.*)$ index.php?url=$1 [L,QSA]
Schreiben Sie jetzt, dass alle meine Anfragen über index.php gehen. In meinen Projektdateien greife ich wie folgt auf meine CSS- und JS-Dateien im Ordner Ressourcen zu:
<link rel="stylesheet" type="text/css" href="/../Resources/my.css"/>
<script src="/../Resources/my.js"></script>
Dies führt zu folgendem Fehler
HTTP/1.1 404 Not Found 258ms
Ich habe versucht, die folgende Rewrite-Regel in der htaccess-Konfiguration hinzuzufügen, aber es funktioniert nicht:
RewriteCond %{REQUEST_URI} ^/Resources/my.css
RewriteRule ^api(.*)$ ../Resources/my.css [NC,QSA,L]
Ich möchte meine Ordnerstruktur nicht ändern, da dieselben CSS- und JS-Ressourcen von mehreren Projekten gemeinsam genutzt werden und es einfach ist, sie von einem einzigen Speicherort aus zu verwalten. Ich möchte sie nur irgendwie referenzieren.
Ich möchte den Code auch nicht in meine Projektdatei aufnehmen, wie zum Beispiel: include('../Resources/my.css')
In PHP möchte ich das nicht.
Bitte geben Sie hierzu eine Lösung an. Danke und Grüße
Antworten
Bei uns ist es eine Art ungeschriebene Rolle, Assets immer in Unterverzeichnissen des Stammverzeichnisses abzulegen (das Verzeichnis, das die index.php
Datei enthält, ist root).
Auf jeden Fall können Sie nicht außerhalb des Dokumentenstamms umschreiben. Dies ist eine Sicherheitssache, und denken Sie nur darüber nach, macht example.com/../my-dir
es Sinn?
Eine Problemumgehung (wie in einem anderen Beitrag ) besteht darin, einen Symbol-Link zu Ihrem Resources
Verzeichnis zu erstellen. Nennen mySymbolLink
wir ihn, dann können Sie Folgendes tun:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_URI} ^Resources/.*
RewriteRule ^Resources/(.*)$ /mySymbolLink/$1 [QSA,L]
</IfModule>
Aber Sie müssen noch die Pfade ändern, zum Beispiel /../Resources/my.js
sollte es /Resources/my.js
funktionieren.
Nun, wie andere auch in Kommentaren und Antworten betont haben , ist dies NICHT MÖGLICH . Wir können nicht über oder außerhalb unseres Projektstamms von clientseitigem Scripting verweisen. Wir können Dinge von der serverseitigen Codierung aus tun, aber clientseitiger Code ist nicht möglich /