ubuntuusers.de

mod_rewrite: problem mit 2. GET-Parameter

Status: Ungelöst | Ubuntu-Version: Kein Ubuntu
Antworten |

Sarius87

Anmeldungsdatum:
10. Dezember 2017

Beiträge: Zähle...

moin, ich habe da ein Problem mit meiner htaccess, hier einmal die .htaccess :

Options +FollowSymlinks
RewriteEngine On
RewriteBase /
RewriteRule ^\.htaccess$ - [F]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/^\.]+)$ /index.php?id=$1 [QSA,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)/([^/]+)$ /$1?action=$2 [QSA,L]

ich kann damit example.com/42 aufrufen, aber beim 2. GET-parameter, example.com/42/edit, fehlt der Inhalt der assets, wie z.b. css. aber wieso ? was ist da falsch und wie muss es richtig heißen ?

hier ein gutes beispiel:

https://sarius87.lima-city.de/42

https://sarius87.lima-city.de/42/edit

danke für hilfen 😀

misterunknown Team-Icon

Ehemalige
Avatar von misterunknown

Anmeldungsdatum:
28. Oktober 2009

Beiträge: 4403

Wohnort: Sachsen

Sarius87 schrieb:

RewriteRule ^\.htaccess$ - [F]

Diese Zeile solltest du getrost weglassen können, denn ein Apache2 sollte schon von Haus aus keine .ht*-Dateien ausliefern. Selbiges ist unter Ubuntu und Debian in der /etc/apache2/apache2.conf festgelegt (such mal nach "FilesMatch").

1  RewriteCond %{REQUEST_FILENAME} !-f
2  RewriteCond %{REQUEST_FILENAME} !-d
3  RewriteRule ^([^/^\.]+)$ /index.php?id=$1 [QSA,L]
4  RewriteCond %{REQUEST_FILENAME} !-f
5  RewriteCond %{REQUEST_FILENAME} !-d
6  RewriteRule ^(.+)/([^/]+)$ /$1?action=$2 [QSA,L]

Ich sehe, was du willst, allerdings würde ich das anders machen. Erstmal: Bis zur Zeile 4 kommt der Apache2 gar nicht, da immer vorher schon Zeilen 1-3 matchen. Von daher ist es schwierig sowas direkt mit Rewrites umzusetzen, vor allem wenn man die Anzahl an Parametern nicht kennt. Ich würde daher einfacher vorgehen, und einfach alles auf die index.php umleiten...

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule .* /index.php [QSA,L]

... um dann erst im PHP die URI auszuwerten:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
<?php

// Diese Zeile erzeugt ein Array, welches alle "Pfadbestandteile" enthält.
// Pfadbestandteile werden aber nur bis zum Fragezeichen erkannt, da danach
// der Query-String anfängt.
$route = preg_split( ",/,", substr( $_SERVER["REQUEST_URI"], 0, strpos( $_SERVER["REQUEST_URI"], "?" ) ), -1, PREG_SPLIT_NO_EMPTY );

echo "<pre>";
print_r( $route );
print_r( $_REQUEST );

Dadurch kannst du URLs in folgender Form verwenden:

$ curl -s example.com/foo/bar/baz?a=b&c=d

Array
(
    [0] => foo
    [1] => bar
    [2] => baz
)
Array
(
    [a] => b
    [c] => d
)

Welchen Zweck die einzelnen Teile des $route-Arrays haben, kannst du dann direkt im PHP festlegen.

Antworten |