• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

.htaccess RewriteRule von download.php?token=123 zu download/123

Sylnois

Mitglied
Hallo Leute,

Zuerst möchte ich euch gerne meine Ordnerstruktur erläutern. Ich habe also eine WebApplikation, die ist irgendwo in mehreren Unterordnern von einem /var/www oder in einem C:\inetpub\wwwroot Ordner abgelegt.
Der Aufbau meiner Dateien sieht wie folgt aus:
Code:
- .htaccess
- index.php
- download.php
- script.php
*tmpl
  *css
    - css.css
  *js
    - js.js
    - jquery.js
(Dabei steht * für Ordner und - für eine Datei)

In der index.php und download.php habe ich includes der von Stylesheets und JS-Scripts, und zwar in relativen Pfäden angegeben(Bsp. tmpl/css/css.css oder tmpl/js/jquery.js).
in der js.js Datei habe ich irgendwelche Ajaxaufrufe, welche auf das script.php verweisen(Pfad des Ajaxaufrufs im js.js Script: script.php)

S, nun zu meiner Applikation. Man kann das download.php Script mit dem Parameter token aufrufen(download.php?token=123123123). Doch die URL sieht ehrlichgesagt nicht so fancy aus. Ich hätte Sie lieber so gehabt: download/123123123 oder download/123123123/.
Also habe ich mir überlegt, ich erstelle doch ganz "einfach" eine htaccess Datei, die wie folgt aussieht:
Code:
Options +FollowSymLinks -MultiViews# Turn mod_rewrite on
RewriteEngine On

RewriteRule ^(download)/(\w+)/?$ $1.php?token=$2 [L,QSA,NC]

Und tatsächlich, ich kann nun mein Script über die gewünschte URL aufrufen, ob download/123123123/ oder download/123123123.
Jedoch ist mir eines aufgefallen, was mir die Freude wieder wegnahm, und zwar waren meine Formatierungen weg, sowie das included Script wurde nicht aufgeführt(lediglich ein Ajaxcall, um Informationen vom Server zu holen). Tüchtig habe ich bei jedem Pfad mal nachgeholfen und überall den absoluten Pfad(ohne Host) angeben(Bsp. anstelle von tmpl/css/css.css -> /sub1/sub2/sub3/tmpl/css/css.css oder anstelle von script.php -> /sub/sub2/sub3/script.php).

Meine Frage an euch ist nun, ob jemandeine Lösung für mein Problem hat. Ich möchte die relativen Pfäden behalten können, da ich das Script auf mehreren Webservern laufen lasse, und zwar in unterschiedlichen Unterverzeichnissen, und ich es für unvorteilhaft halte, Änderungen an jedem Standort durchzuführen.

Gruss
Sylnois
 
Wg. der eingebundenen Dateien habe ich eine Vermutung - für mehr reicht es ohne Link zur Seite nicht. Du lädst die Seite z.B. über

Code:
http://localhost/download/123123123/

Wenn Du nun in deinem HTML-Code z.B. die CSS-Datei so referenzierst:

HTML:
<link href="css/style.css" type="stylesheet">

dann sucht der Browser Sie unter

Code:
http://localhost/download/123123123/css/style.css

wo sie vermutlich nicht liegt.

In dem Fall hast Du 2 Möglichkeiten:
a) Du ergänzt deine .htaccess-Datei um eine Rule die sagt, egal in welcher Verzeichnistiefe die style.css aufgerufen wird, lade sie vom Hauptverzeichnis bzw. dem Unterverzeichnis css.
b) Du könntest Du auch einfach im HTML-Code mit einem simplem / sagen, dass die CSS-Datei ausgehend vom root der Domain geladen werden sollen. Also:

HTML:
<link href="/css/style.css" type="stylesheet">
 
Wg. der eingebundenen Dateien habe ich eine Vermutung - für mehr reicht es ohne Link zur Seite nicht. Du lädst die Seite z.B. über

Code:
http://localhost/download/123123123/

Wenn Du nun in deinem HTML-Code z.B. die CSS-Datei so referenzierst:

HTML:
<link href="css/style.css" type="stylesheet">

dann sucht der Browser Sie unter

Code:
http://localhost/download/123123123/css/style.css

wo sie vermutlich nicht liegt.

Stimmt auch so. Habe es mit nem Debugging Tool überprüft.

In dem Fall hast Du 2 Möglichkeiten:
a) Du ergänzt deine .htaccess-Datei um eine Rule die sagt, egal in welcher Verzeichnistiefe die style.css aufgerufen wird, lade sie vom Hauptverzeichnis bzw. dem Unterverzeichnis css.

Leider komme ich mit dem Syntax nicht so zu Recht. Weisst du(oder sonst jemand) um welche Zeilen ich meine -htaccess-Datei erweitern soll(in der Zwischenzeit werde ich mich mit Google beschäftigen).

b) Du könntest Du auch einfach im HTML-Code mit einem simplem / sagen, dass die CSS-Datei ausgehend vom root der Domain geladen werden sollen. Also:

HTML:
<link href="/css/style.css" type="stylesheet">

Dachte ich auch, funktioniert jedoch nicht. Vermutlich, weil halt die Daten nicht direkt im root untergebracht sind, sondern halt in Unterordnern.
 
Das kann keine Begründung dafür sein, dass Variante b) nicht funktioniert. Zeig einen Link zur Seite damit man dir hierbei weiterhelfen kann.
 
Ich lad mir sicher keine Datei runter. Ich sprach oben von einem Link auf die Seite.

Bei Verwendung einer .htaccess-Datei müsste theoretisch

Code:
RewriteRule style.css /style/style.css

ausreichen.
 
Ich lad mir sicher keine Datei runter. Ich sprach oben von einem Link auf die Seite.

Bei Verwendung einer .htaccess-Datei müsste theoretisch

Code:
RewriteRule style.css /style/style.css

ausreichen.

Du musst auch nichts herunterladen. Ich wollte lediglich dir einen Beispiellink zeigen und direkt auf das downloadscript.php verweisen.

Danke, ich werde es heute Abend mal testen.

@edit So, ich konnte es testen und tatsächlich - es funktioniert!! Ich habe diese Zeilen hinzugefügt:
Code:
RewriteRule ^(download)/(\w+)/?$ $1.php?token=$2 [L,QSA,NC]
RewriteRule skydrops.css tmpl/css/css.css
RewriteRule skydrops.js tmpl/js/js.js
RewriteRule jquery-1.10.2.min.js tmpl/js/jquery-1.10.2.min.js

Jetzt aber habe ich nur noch ein Problem. in meinem js.js Script habe ich mehrere AJAX-Aufrufe, welches auf das Script "script.php" verweisen. Leider findet er das nicht. Gibst hierfür auch eine RewriteRule?
 
Zuletzt bearbeitet:
Zurück
Oben