htacess Umleitung zu js & css Dateien

Aug 03 2020

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

Top-Master Aug 03 2020 at 23:36

Bei uns ist es eine Art ungeschriebene Rolle, Assets immer in Unterverzeichnissen des Stammverzeichnisses abzulegen (das Verzeichnis, das die index.phpDatei 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-dires Sinn?


Eine Problemumgehung (wie in einem anderen Beitrag ) besteht darin, einen Symbol-Link zu Ihrem ResourcesVerzeichnis zu erstellen. Nennen mySymbolLinkwir 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.jssollte es /Resources/my.jsfunktionieren.

HimanshuAgrawal Aug 08 2020 at 19:00

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 /