Problem mit virtuellem VS echtem Pfad und andere Probleme

URLs umschreiben, umleiten, blocken oder sperren - all das und noch viel mehr kann mit mod_rewrite erreicht werden. Mit regulären Ausdrücken, Conditions und Rules stehst Du auf Kriegsfuss? mod_rewrite macht nicht das was Du willst, oder funktioniert gar nicht? hier bist Du richtig!

Moderatoren: Bob, Super-Mod

Problem mit virtuellem VS echtem Pfad und andere Probleme

Beitragvon MarcDK » 16.02.2005 13:13

Schön, dass es einForum gibt. =)

Also ich habe folgendes Problem:

Inhalt meiner .htaccess
Code: Alles auswählen
RewriteEngine On
RewriteRule ^(.*)/$ index.php5?id=$1 [NC]
RewriteRule ^(.*)/(.*).html$ index.php5?id=$1&sub_id=$2 [NC]


Das funktioniert auch super.

Mein Problem: Es gibt einen "echten" Ordner auf meinem Serve rund zwar "/board/" der das Forum enthält. Wenn er nun www.meineurl.com/board/ aufruft, dann versucht er (natürlich) die variable "$id" auf "board" zu setzten was er natürlich nicht soll sondern er soll einfach in das Verzeichnis gehen... =(

Kann man das irgendwie in der .htaccess angeben dder muss ich was umprogramieren?

Könnt ihr mir helfen?
Zuletzt geändert von MarcDK am 16.02.2005 15:11, insgesamt 1-mal geändert.
MarcDK
.
.
 
Beiträge: 9
Registriert: 16.02.2005 13:09

AH!

Beitragvon MarcDK » 16.02.2005 13:16

Ok, vielleicht habt ihr eine elegantere Lösung aber was witzigerweise funktioniert hat:

.htaccess
Code: Alles auswählen
RewriteEngine Off


in das /board/-Verzeichnis legen. =)
MarcDK
.
.
 
Beiträge: 9
Registriert: 16.02.2005 13:09

Beitragvon MarcDK » 16.02.2005 13:37

Ok, ich wusste das ich das hier heut enoch mal sehe. =)

Mein neustes Problem:

Code: Alles auswählen
RewriteEngine On
RewriteRule ^(.*)/$ index.php5?id=$1 [NC]
RewriteRule ^(.*)/(.*).html$ index.php5?id=$1&sub_id=$2 [NC]
RewriteRule ^(.*)/(.*)/(.*).html$ index.php5?id=$1&sub_id=$2&char=$3 [NC]


Ich wollte das Ding einfach erweitern aber er macht es nicht. =/ Vielleicht gibt es da eine Hierachie die ich nicht beachtet habe?

UPDATE: Wie ich festellen musste, wird zwar im letzten Fall bei so etwas:

www.meineurl.com/id/subid/char.html

die char-Variable übergeben aber nicht die beiden variablen id & sub_id. =/
MarcDK
.
.
 
Beiträge: 9
Registriert: 16.02.2005 13:09

Beitragvon MarcDK » 16.02.2005 15:10

Sorry, dass ich euch so zu spame aber ich komme jetzt irgendwie nicht weiter.

Code: Alles auswählen
Options +FollowSymLinks
RewriteEngine On
RewriteRule ^(.*)/$ index.php5?id=$1 [NC]
RewriteRule ^(.*)/(.*)/$ index.php5?id=$1&sub_id=$2 [NC]
RewriteRule ^(.*)/(.*)/(.*).html$ index.php5?id=$1&sub_id=$2&char=$3 [NC]


Das funktioniert auch nicht.

Also ich möchte einfach, dass er solche Sachen kann:

meineurl.com/variable1/
meineurl.com/variable1/variable2/
meineurl.com/variable1/variable2/variable3.html

Aber so wie ich es oben hingeschrieben habe, wird in der 2. Regel die "$id" Variable nicht übernommen und die dritte Regel geht auch nicht =/

UPDATE: Was interessant ist:

Code: Alles auswählen
RewriteRule ^(.*)/(.*)/$ index.php5?id=$1&sub_id=$2 [NC]


im Gegensatz zu
Code: Alles auswählen
RewriteRule ^(.*)/(.*).html$ index.php5?id=$1&sub_id=$2 [NC]


geht nicht. Aber ich möchte das gerne mit Verzeichnissen haben und nicth HTML
MarcDK
.
.
 
Beiträge: 9
Registriert: 16.02.2005 13:09

Re: Problem mit virtuellem VS echtem Pfad und andere Problem

Beitragvon Bob » 16.02.2005 15:39

MarcDK hat geschrieben:Inhalt meiner .htaccess
Code: Alles auswählen
RewriteEngine On
RewriteRule ^(.*)/$ index.php5?id=$1 [NC]
RewriteRule ^(.*)/(.*).html$ index.php5?id=$1&sub_id=$2 [NC]

[...]
Mein Problem: Es gibt einen "echten" Ordner auf meinem Serve rund zwar "/board/" der das Forum enthält. Wenn er nun www.meineurl.com/board/ aufruft, dann versucht er (natürlich) die variable "$id" auf "board" zu setzten was er natürlich nicht soll sondern er soll einfach in das Verzeichnis gehen... =(


Code: Alles auswählen
RewriteEngine On
# verzeichnis ausschließen "keine Substitution, letzte Regel"
RewriteRule ^board - [L]
# yahoo fordert gerne Verzeichnisse ohne trailing slash an, nach
# Möglichkeit die RegEx immer so eng wie mgl. fassen
# solltest du nur Ziffern haben, [0-9]+ verwenden
RewriteRule ^([a-z0-9-_]+)/?$ index.php5?id=$1 [L,NC]
RewriteRule ^([a-z0-9-_]+)/([a-z0-9-_]+)\.html$ index.php5?id=$1&sub_id=$2 [L,NC]
Bob
Moderator
Moderator
 
Beiträge: 5044
Registriert: 01.10.2004 13:10

Beitragvon Bob » 16.02.2005 15:49

MarcDK hat geschrieben:Also ich möchte einfach, dass er solche Sachen kann:

meineurl.com/variable1/
meineurl.com/variable1/variable2/
meineurl.com/variable1/variable2/variable3.html


Code: Alles auswählen
RewriteEngine On
# verzeichnis ausschließen "keine Substitution, letzte Regel"
RewriteRule ^board - [L]
# das müsste alles abdecken
RewriteRule ^([a-z0-9-_]+)/?([a-z0-9-_]*)/?(([a-z0-9-_]+)\.html)?$ index.php5?id=$1&sub_id=$2&char=$4 [L,NC]


Grüße
Robert
Bob
Moderator
Moderator
 
Beiträge: 5044
Registriert: 01.10.2004 13:10

Beitragvon MarcDK » 16.02.2005 15:51

Cool, danke. Aber leider deckt das meinen letzten Fall nicht ab:

und zwar so:

domain.com/variable1/varible2/vasriable3.html

Also praktisch ein Verzeichnis mehr weil ich ne 3. Variable habe aber wernn ich die Regel erweitere, dann übergibt er meist die $id Variable nicht oder die ganze Regel geht nicht (siehe mein letztes Posting)

Und was genau macht er hier: ^([a-z0-9-_]+)

Aber vielen Dank, dass Du dich meiner annimmst. =)

UPDATE: Ach danke! Du hast es ja danach gepostet! Vielen dank! Ich probierew das gleich mal aus!

Update 2

Wow! Alle meine Probleme der letzten Stunden haben sich in Luft aufgelöst! Super! Wenn Du einen Moment noch Zeit hast, könntest Du es mir dann erklären was falsch war und was genau die ? bei dir darin machen?
MarcDK
.
.
 
Beiträge: 9
Registriert: 16.02.2005 13:09

greedy regEx

Beitragvon Bob » 16.02.2005 16:40

Das Problem hier ist/war die RegEx .*
Dies ist die einfachste und die gefährlichste, auf sie trifft jeder Ausdruck zu.

^(.*)/$ aus der 1. Regel matcht auch in
$1: sd/sd/
Damit kommt die regEx aus der 2. Regel ^(.*)/(.*)/$ gar nicht mehr zum Zuge (weil die 1. Regel bereits erfüllt ist und die Ersetzung durch index.php5?id=... bereits erfolgt ist).
im Gegensatz zu

Code: Alles auswählen
RewriteRule ^(.*)/(.*).html$ index.php5?id=$1&sub_id=$2 [NC]
Diese Regel erfordert die Buchstaben html (sowie ein beliebiges Zeichen davor '.' => darum \. , was den Punkt als solches darstellt), was durch die anderen Regeln nicht erfüllt ist. Aber auch nur deshalb, weil bei den anderen beiden regEx der Slash am Ende zwingend war. Eine RegEx ^(.*)$ oder ^(.*)/?$ (was den Slash optional macht => 0 oder 1 Zeichen von dem Slash) hätte ebenfalls die 3. Regel "ausgehebelt".

Umgehen kann man das einfach, in dem man die Regeln umstellen würde, also in der Reigenfolge 2-1-3 (bezogen auf den orig. Code mit erzwungenem Slash am Ende). Davon ist aber grunds. abzuraten, solange es noch andere Lösungen gibt.

Und was genau macht er hier: ^([a-z0-9-_]+)
Die regEx wurde jetzt eingeschränkt. Statt .* 0 bis n beliebige Zeichen, sind jetzt nur noch 1 bis n Zeichen (das macht das '+') von a-z, 0-9 der Bindestrich und der Unterstrich "erlaubt". Der Slash ist hier nicht dabei, sodass in den einzelnen Gruppen (das ist das in runden Klammern) nur noch der erwünschte Ausdruck steht. Durch das "Optionalstellen" einiger Ausdrücke über ? und *, kann man die drei Regeln zu einer Regel zusammenfassen.
Bob
Moderator
Moderator
 
Beiträge: 5044
Registriert: 01.10.2004 13:10

Beitragvon MarcDK » 16.02.2005 17:21

Wow! Danke! :shock:
MarcDK
.
.
 
Beiträge: 9
Registriert: 16.02.2005 13:09


Zurück zu mod_rewrite

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste

cron