Ich lege ein System mit mehreren Öffentlichen Ordnern an und benötige den Befehl .htaccess, um den Zugriff auf alle Öffentlichen Ordner, aber nur Öffentlichen Ordner zu ermöglichen.htaccess und mehrere öffentliche Ordner
Die Verzeichnisstruktur sieht wie folgt aus etwas:
apps
-app1
-public
-app2
-public
-app3
-public
public
system
-public
Die Wurzel für öffentliche Ordner Skript, Bild und CSS Vermögen geteilt haben, die später in einzelne App Ordner verpackt bekommt je nach Bedarf, so dass sie wie eingesetzt wird Standalone-Apps und enthält den Front-Controller. Der Systemordner enthält Skripts und CSS-Assets für die Systemadministration und das Debugging. Die App-Ordner haben ihre eigenen öffentlichen Ordner und müssen bei der direkten Ausführung nicht auf die Systemressourcen zurückgreifen.
muss ich meine .htaccess all diesen öffentlichen Ordner belichten, ohne "public" in der URL zu setzen, das heißt:
somedomain.com/css/something.css
sollten Karte zu: somedomain.com/public/css/something.css
somedomain.com/system/css/something.css
zur Karte sollte: somedomain.com/system/public/something.css
somedomain.com/app1/css/something.css
sollten Karte zu: somedomain.com/apps/app1/public/css/something.css
In meinem vorhandenen .htaccess habe ich eine Reihe von Möglichkeiten ausprobiert, dies ohne Glück zu mappen. Der öffentliche Ordner der Basisebene ist zwar gut, aber das Problem tritt auf, wenn ich in einen öffentlichen Ordner umschreiben muss, der mehr als eine Ebene tief ist, also System und Apps.
ich nicht wirklich sehen, was mit diesem falsch ist, aber hier ist, was ich habe jetzt:
# Change default directory page
DirectoryIndex index.php index.html
# Prevent directory listings
Options All -Indexes -Multiviews
<IfModule mod_rewrite.c>
RewriteEngine On
Options +FollowSymlinks
#App folder block
#Does not match system folder
RewriteCond %{REQUEST_URI} !^/system
#Does match an app folder
RewriteCond %{REQUEST_URI} ^/apps/([a-zA-Z0-9\-\_]*)$
#Does not match an app public folder
RewriteCond %{REQUEST_URI} !^/apps/([a-zA-Z0-9\-\_]*)/public
#Redirect to specified app public folder
RewriteRule ((!?apps/)(!?public/).*)$ apps/$1/public/$2 [L,NC]
#System folder block
#Does match system folder
RewriteCond %{REQUEST_URI} ^/system(/.*) [NC]
#Does not match system public folder
RewriteCond %{REQUEST_URI} !^/system/public [NC]
#Redirect to system public folder
RewriteRule . /system/public/$1 [L,NC]
#Root public folder block
#Does not match root public folder
RewriteCond %{REQUEST_URI} !^/public/
#Does not match system public folder
RewriteCond %{REQUEST_URI} !^/system/public/
#Does not match an app public folder
RewriteCond %{REQUEST_URI} !^/apps/([a-zA-Z0-9\-\_]*)/public/
#Redirect all remaining requests to front controller
RewriteRule ^(.*)$ public/index.php?action=$1 [QSA,L]
</IfModule>
Mein Zugriffsprotokoll gibt die folgende wenn ich versuche, somedomain.com/system/css/something.css
127.0.0.1 - - [25/Mar/2017:23:04:13 -0600] "GET /system/css/something.css HTTP/1.1" 200 - "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/601.7.7 (KHTML, like Gecko) Version/9.1.2 Safari/601.7.7"
Die laden Seite gibt einen Statuscode 200 OK
zurück, aber Inhalt wird nicht geladen, und es gibt keine gültige Route zu jeder Datei, die wie dem Zugriffsprotokoll angegeben wird.
Wenn ich die gleiche Datei wie folgt referenzieren: somedomain.com/system/public/css/something.css
dann lädt es gut, aber ich brauche die "öffentliche" nicht in der URL enthalten sein. Dies funktioniert bisher nur für den öffentlichen Ordner auf Root-Ebene.
Dieses Verhalten war konsistent, wenn ich alles außer dem Teil, der sich auf den Öffentlichen Ordner des Systems bezieht, auskommentierte, so dass andere Regeln das Verhalten nicht stören.
Hinweis: benötigen eine Lösung, ohne die gemeinsame
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
Der Grund dafür ist, dass es nie einen direkten Zugang Verzeichnis sein sollte, und die tatsächlichen öffentlichen HTML-Dateien Pfade sind immer neu geschrieben. Dies wird in den einzelnen App-Ordnern anders gehandhabt, wenn sie direkt geladen werden, und das funktioniert bereits und kann zu diesem Zweck nicht geändert werden.
Dieses gut für den Systemordner gearbeitet, aber die Inhalte sind App-Ordner dynamisch hinzugefügt, so dass ihre Namen harte Kodierung in die .htaccess in diesem Fall nicht wirklich sinnvoll ist, das ist warum hatte ich sie ursprünglich als Wildcards präsentiert. Wenn du die Antwort überarbeiten kannst, um sie zu behalten, akzeptiere ich sie. – mopsyd
ok check meine aktualisierte Antwort jetzt – anubhava
Schön, funktioniert super. Danke noch einmal. – mopsyd