php.de

Zurück   php.de > Webentwicklung > Server, Hosting und Workstations

Server, Hosting und Workstations Server-Konfigurationsdateien (.htaccess/httpd.conf) und Arbeiten auf Serverebene

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 13.05.2011, 17:16  
Neuer Benutzer
 
Registriert seit: 13.05.2011
Beiträge: 8
PHP-Kenntnisse:
Fortgeschritten
Qerz befindet sich auf einem aufstrebenden Ast
Standard mod_rewrite: RewriteRule

Hi Leute,

ich weiß, dass das nicht PHP ist, aber ich bin mir sicher, dass ihr mir trotzdem weiterhelfen könnt.
Ich habe ein Problem mit den RewriteRules eines cgi-Skriptes.

Die RewriteRules sehen in der .htaccess so aus:
Code:
RewriteEngine on
RewriteCond %{REQUEST_URL} !^/admin
RewriteRule (.*)/$ index.php?lang=$1 [NC]
RewriteRule (.*)/(.*)/$ index.php?lang=$1&page=$2 [NC]
RewriteRule (.*)/(.*)/(.*)/$ index.php?lang=$1&page=$2&section=$3 [NC]
RewriteRule (.*)/(.*)/(.*)/(.*)/$ index.php?lang=$1&page=$2&section=$3&key=$4 [NC]
RewriteRule (.*)/(.*)/(.*)/(.*)/(.*).html$ index.php?lang=$1&page=$2&section=$3&key=$4&addition=$5 [NC,L]
Die URL sieht beispielsweise so aus:
example.com/de/news/s/5/politik.html

Klappt soweit auch. Wenn ich aber z.B. folgende URL habe:
example.com/de/news/s/
erhalte ich als lang index.php; ich sollte allerdings de erhalten

Ich stehe im Moment auf dem Schlauch, weil ich keine Ahnung habe, woran das liegt.
Bei folgenden (Beispiel-)URLs klappt alles einwandfrei:
example.com/de/
example.com/de/news/s/5/politik.html

Bei diesen allerdings nicht:
example.com/de/news/
example.com/de/news/s/
example.com/de/news/s/5/
Die page-,section- und key-Werte stimmen alle,
nur als lang-Wert (language) wird jedes mal index.php statt de übergeben.

Ich würde mich über eure Hilfe freuen.

MfG

Geändert von Qerz (13.05.2011 um 17:50 Uhr). Grund: IANA
Qerz ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 13.05.2011, 17:39  
Moderator¹
 
Registriert seit: 28.03.2010
Beiträge: 7.470
PHP-Kenntnisse:
Fortgeschritten
ChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer Anblick
Standard

Bitte berücksichtigen: http://www.php.de/board-support/anno...URLs_maskieren und Posting entsprechend anpassen.

Zitat:
Ich stehe im Moment auf dem Schlauch, weil ich keine Ahnung habe, woran das liegt.
Vermutlich daran, dass Rewriting, wenn per .htaccess auf Verzeichnisebene aktiviert, nach dem Umschreiben der Adresse mit dieser neuen Adresse eine „neue Runde“ startet.
__________________
RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
ChrisB ist offline   Mit Zitat antworten
Alt 14.05.2011, 12:58  
Erfahrener Benutzer
 
Benutzerbild von lstegelitz
 
Registriert seit: 07.09.2009
Beiträge: 4.005
PHP-Kenntnisse:
Fortgeschritten
lstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nett
Standard

Du solltest die spezialisierten Regeln zuerst nennen und danach immer allgemeingültiger werden... Der Ausdruck (.*)/$ matched alles, was mit einem Slash endet (egal wieviele Slashes dazwischen kommen).
Die letzte Regel ist nur eine Ausnahme, weil sie auf das Ende ".html" prüft
__________________
Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.
lstegelitz ist offline   Mit Zitat antworten
Alt 14.05.2011, 13:51  
Neuer Benutzer
 
Registriert seit: 13.05.2011
Beiträge: 8
PHP-Kenntnisse:
Fortgeschritten
Qerz befindet sich auf einem aufstrebenden Ast
Standard

Danke schonmal für die schnelle Antwort.

Zitat:
Zitat von lstegelitz Beitrag anzeigen
Du solltest die spezialisierten Regeln zuerst nennen und danach immer allgemeingültiger werden
Wenn ich dich richtig verstehe, sollte das dann so aussehen:
Code:
RewriteEngine on
RewriteCond %{REQUEST_URL} !^/admin
RewriteRule (.*)/(.*)/(.*)/(.*)/$ index.php?lang=$1&page=$2&section=$3&key=$4 [NC]
RewriteRule (.*)/(.*)/(.*)/$ index.php?lang=$1&page=$2&section=$3 [NC]
RewriteRule (.*)/(.*)/$ index.php?lang=$1&page=$2 [NC]
RewriteRule (.*)/$ index.php?lang=$1 [NC]
RewriteRule (.*)/(.*)/(.*)/(.*)/(.*).html$ index.php?lang=$1&page=$2&section=$3&key=$4&addition=$5 [NC,L]
Der Fehler bleibt allerdings bestehen.
Qerz ist offline   Mit Zitat antworten
Alt 14.05.2011, 15:05  
Erfahrener Benutzer
 
Benutzerbild von lstegelitz
 
Registriert seit: 07.09.2009
Beiträge: 4.005
PHP-Kenntnisse:
Fortgeschritten
lstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nett
Standard

Alle deine Problemfälle sind in den Regeln doppeldeutig abgebildet. Es treffen mehrere Regeln gleichzeitig zu, durch das Verketten [C] der Ausdrücke werden auch alle Umschreibungen vorgenommen.

Code:
example.com/de/news/
example.com/de/news/s/
example.com/de/news/s/5/
RewriteRule (.*)/$ index.php?lang=$1 [NC]
"Alles, was mindestens einen Slash enthält mit Slash endet"

RewriteRule (.*)/(.*)/$ index.php?lang=$1&page=$2
"Alles, was mindestens 2 Slashes enthält und mit einem Slash endet"

RewriteRule (.*)/(.*)/(.*)/$ index.php?lang=$1&page=$2&section=$3 [NC]
"Alles, was mindestens 3 Slashes enthält und mit einem Slash endet"

Wie du siehst, ist bereits dein erster Problemfall von allen drei Regeln betroffen - egal, wie rum du es betrachtest. Punkt-Stern matched alles (beliebiges Zeichen, beliebig oft).
__________________
Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.
lstegelitz ist offline   Mit Zitat antworten
Alt 14.05.2011, 15:35  
Erfahrener Benutzer
 
Registriert seit: 13.05.2011
Beiträge: 188
PHP-Kenntnisse:
Fortgeschritten
php1704 wird schon bald berühmt werden
Standard

Zitat:
Greedy and Nongreedy Matching in a Regular Expression
By default, pattern matching is greedy, which means that the matcher returns the longest match possible. For example, applying the pattern A.*c to AbcAbcA matches AbcAbc rather than the shorter Abc. To do nongreedy matching, a question mark must be added to the quantifier. For example, the pattern A.*?c will find the shortest match possible.
link

Könntest auch die erlaubten Werte genauer definieren:

(de|en|fr)/([a-z])+/([a-z]{1})/([0-9]+)

oder auch einfach nur:
([^/]+)/([^/]+)

Nur um dir ein paar Anregungen zu geben.

Grüße.
php1704 ist offline   Mit Zitat antworten
Alt 15.05.2011, 13:26  
Neuer Benutzer
 
Registriert seit: 07.04.2011
Beiträge: 22
PHP-Kenntnisse:
Fortgeschritten
ajmeht befindet sich auf einem aufstrebenden Ast
Standard

Oder du könntest nach dem matchen einer Regel keine ander mehr anwenden. Das kannst du mit einem L in eckigen Klammern hinter der Regel erreichen.

Bsp:
Code:
RewriteRule (.*)/(.*)/(.*)/(.*)/$ index.php?lang=$1&page=$2&section=$3&key=$4 [NC,L]
ajmeht ist offline   Mit Zitat antworten
Alt 16.05.2011, 12:39  
Neuer Benutzer
 
Registriert seit: 13.05.2011
Beiträge: 8
PHP-Kenntnisse:
Fortgeschritten
Qerz befindet sich auf einem aufstrebenden Ast
Standard

Danke für die Hilfe.

Ich habe das Problem jetzt so gelöst:
Code:
RewriteEngine on
RewriteCond %{REQUEST_URL} !^/admin
RewriteRule ^([0-9a-z]+)/$ index.php?lang=$1 [NC,L]
RewriteRule ^([0-9a-z]+)/([a-z]+)/([0-9a-z]+)/([0-9]+)/$ index.php?lang=$1&page=$2&section=$3&key=$4 [NC,L]
RewriteRule ^([0-9a-z]+)/([a-z]+)/([0-9a-z]+)/$ index.php?lang=$1&page=$2&section=$3 [NC,L]
RewriteRule ^([0-9a-z]+)/([a-z]+)/$ index.php?lang=$1&page=$2 [NC,L]
RewriteRule ^([0-9a-z]+)/([a-z]+)/([0-9a-z]+)/([0-9]+)/(.*)\.html$ index.php?lang=$1&page=$2&section=$3&key=$4&addition=$5 [NC,L]

Zitat:
Zitat von php1704 Beitrag anzeigen
Könntest auch die erlaubten Werte genauer definieren:

(de|en|fr)/([a-z])+/([a-z]{1})/([0-9]+)

oder auch einfach nur:
([^/]+)/([^/]+)

Nur um dir ein paar Anregungen zu geben.
Grüße.
Danke für die Anregung!

Geändert von Qerz (16.05.2011 um 14:15 Uhr). Grund: gelöst
Qerz ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
RewriteRule auf alte Link-Struktur will_php_lernen Server, Hosting und Workstations 1 08.01.2011 00:10
[Erledigt] sprechende URL mit RewriteRule? will_php_lernen Server, Hosting und Workstations 3 27.12.2010 16:21
Probleme mit .htaccess - mod_rewrite Nupe0 PHP Tipps 2010 22 31.10.2010 00:44
RewriteRule funktioniert beim Hoster, aber nicht in meiner Homeumgebung Fragender_Gast PHP Tipps 2010 4 27.10.2010 17:45
htaccess RewriteRule - Problem mit dem "-" web4free PHP Tipps 2010 6 29.07.2010 13:45
[Erledigt] RewriteRule killt die POST Variablen eisenhans PHP Tipps 2010 18 01.06.2010 22:09
mod_rewrite problem aniga_de Server, Hosting und Workstations 6 26.01.2010 21:26
htaccess wenn datei nicht existiert J_Jara Server, Hosting und Workstations 6 13.01.2010 17:12
htaccess RewriteRule reguläre ausdrücke J_Jara PHP Tipps 2009 6 04.11.2009 16:20
Kein Zugriff! yannicf PHP Tipps 2009 1 16.03.2009 13:08
/kategorie auf / weiterleiten htaccess ypsie PHP Tipps 2006 9 13.10.2006 14:47
[Erledigt] RewriteRule klappt einfach nicht vollständig Server, Hosting und Workstations 3 03.12.2005 23:23
Error 500 bei .htaccess test022 PHP Tipps 2005 18 10.02.2005 17:11
RewriteRule im PHP Modul PHP Tipps 2004 1 11.09.2004 12:42
[Erledigt] Mime-Type über RewriteRule setzen Server, Hosting und Workstations 1 17.06.2004 04:29

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
rewriterule [nc], rewriterule, mod_rewrite lange, rewriterule tutorial german, mod_rewrite examples, php rewriterule, mod_rewrite rewriterule, rewriterule \lang=\, php \-s\ cgi rewriterule, mod_rewrite quantifier, mod_rewrite - als gültiges zeichen, rewrite ausnahme, mod rewrite punkt sternchen, php rewrite rule, rewriterule zahlen, mod_rewrite tipps, rewriterule ^webhosting/3, alles über index.php rewriterule, rewriterule php 5, google.cxh

Alle Zeitangaben in WEZ +2. Es ist jetzt 22:05 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum