Seite 1 von 1

Problem mit virtuellem VS echtem Pfad und andere Probleme

Verfasst: 16.02.2005 13:13
von MarcDK
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?

AH!

Verfasst: 16.02.2005 13:16
von MarcDK
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. =)

Verfasst: 16.02.2005 13:37
von MarcDK
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. =/

Verfasst: 16.02.2005 15:10
von MarcDK
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

Re: Problem mit virtuellem VS echtem Pfad und andere Problem

Verfasst: 16.02.2005 15:39
von Bob
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]

Verfasst: 16.02.2005 15:49
von Bob
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

Verfasst: 16.02.2005 15:51
von MarcDK
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?

greedy regEx

Verfasst: 16.02.2005 16:40
von Bob
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.

Verfasst: 16.02.2005 17:21
von MarcDK
Wow! Danke! :shock: