Seite 1 von 1

PHP-Code - Frage

Verfasst: 09.06.2011, 19:23
von chandor
Hi,

meine PHP-Kenntnisse sind so ... lala ...! Könnte mir jemand eine Codezeile, aus einem von mir verwendeten Skript erklären?

Code: Alles auswählen

if (ENABLE_REWRITE == 1)
{
   preg_match ('#(.*)link(_|-)(\d+)\.htm[l]?$#i', request_uri(), $matches);
Mein Prob ist: Standardmäßig sollen html-Seiten ausgeliefert werden. Leider werden aber zusätzlich noch htm-Seiten UND verschiedenste Kreationen in Groß- und Kleinschreibung der URL mit ausgeliefert. Nach vielen Herumpopeln bin ich nun soweit, dass es nicht an der htaccess liegt.

Könnte hier ein Grund darin liegen?

Verfasst:
von

Hochwertiger Linkaufbau bei ABAKUS:
  • Google-konformer Linkaufbau
  • nachhaltiges Ranking
  • Linkbuilding Angebote zu fairen Preisen
  • internationale Backlinks
Wir bieten Beratung und Umsetzung.
Jetzt anfragen: 0511 / 300325-0

Verfasst: 09.06.2011, 21:07
von matze_1963
Hi!

Ich weiss zwar nicht genau was dein Problem ist aber schau mal hier vieleicht hilft dir das
https://www.phplinkdirectory.com/forum/ ... hp?t=23654
https://www.phplinkdirectory.com/forum/ ... hp?t=20766


Cu Matze

Verfasst: 09.06.2011, 21:10
von apfelesser
Wenn du sein Problem nicht verstanden hast, dann frage ich mich weshalb du ihm dennoch zwei Links zur Verfügung stellst :=)

Ein Link zu Google wäre da wahrscheinlich treffender gewesen...

Verfasst:
von
SEO Consulting bei ABAKUS Internet Marketing
Erfahrung seit 2002
  • persönliche Betreuung
  • individuelle Beratung
  • kompetente Umsetzung

Jetzt anfragen: 0511 / 300325-0.


Verfasst: 09.06.2011, 21:15
von matze_1963
Hallo @apfelesser

ja sicher wollte blos lieb sein :roll:

Verfasst: 09.06.2011, 22:34
von chris21
Zur Erklärung:

Code: Alles auswählen

if (ENABLE_REWRITE == 1)
{
   preg_match ('#(.*)link(_|-)(\d+)\.htm[l]?$#i', request_uri(), $matches);
Es wird überprüft und im Array matches gespeichert, ob die aufgerufene URL zu folgenden Regeln passt:


keine oder beliebige Zeichen #### da dein Problem mit Groß- und Kleinschreibung etc. akut

link

- oder _

dann eine Zahl

dann .htm oder html (letzteres über [l]?, das besagt, dass l vorkommen darf oder fehlen darf)

und das #i setzt noch die case-insensitive Flag - wodurch das Groß-Kleinschreibproblem verschärft wird.

Wenn Du also das

#i

in #

änderst, könnte das helfen

und zudem das "[l]?" ganz rauslöschen.

Ich weiß nicht, was du sonst damit später machen willst, aber diese beiden Veränderungen in der Regex sollten bzgl. preg_match helfen.

Verfasst: 10.06.2011, 06:16
von chandor
@chris21
Danke ... für Erklärung. Das mit dem "i" hatte ich irgendwo schon mal gesehen - wurde hier aber ander im Code verwendet.

Ich habe das eben mal ausprobiert.

1. htm[l] geändert in html => es sollen html-Seiten ausgeliefert werden
2. das i entfernt

Führt leider nicht zum gewünschten Ergebnis: Es wird nun zwar auf Gross- und Kleinschreibung geachtet, doch bezieht sich das nur auf die Dateiendung Html, html oder hTml. Die URL selbst kann hier weiterhin ohne Ende groß und klein varriert werden. Leider hat das ausklammern auch nichts gebracht, es werden weiterhin auch htm-Seiten ausgeliefert. Könnte man die htm-Endung per if im Seiten-Header abfangen und einen canonical-Tag einbauen?

@matze_1963
Da hast Du sehr schön erkannt, um welches Skript es geht. Es geht mal wieder um das generelle Geister-, URL- und DC-Problem vom phpLD. Beide Links treffen nicht zu, zumal ich nicht davon überzeugt bin, dass es an der htaccess bzw. am Server liegt. Letzter Link von Dir könnte ohnehin nicht passen, da in der rewriterule ein "NC" steht, was selbst im original code fehlt.

Wenn Du Zugang zum Supportforum hast, kannst Du im deutschsprachigen Forum mehr über meine Probleme nachlesen. Es ist etwas umfassender.

Verfasst: 10.06.2011, 12:03
von chris21
Hast Du zu Punkt 1 auch das Fragezeichen entfernt? steht da jetzt "html$" oder "html?$" Da muss "html$" stehen.

Zu Punkt 2: "(.*)" matcht matcht beliebige Zeichen vor dem link. Also auch Groß-und Kleinschreibung.

Wenn Du uns genau sagen kannst, was vor dem "link" für Dich stehen darf, können die Regeln restriktiver gemacht werden.

Wenn Du z.B. "(.*)" mit "([a-z0-9_-]+)" ersetzt, dürfen vor dem Link nur noch kleine Buchstaben, Zahlen sowie die Zeichen "-" und "_" Anwendung finden. An dieser Stelle könnte man also das Problem bzgl. Groß- und Kleinschreibung angehen.

Verfasst: 10.06.2011, 12:48
von chandor
Ja, das mit den beliebigen Zeichen vorher ist mir klar. Soll so ja auch sein. Nur das Script hat definitiv ein Problem mit den URL. Der Code-Auszug betrift nur einen Teil des ganzen Problems.

Die htaccess habe ich schon rauf und runter! Mein Server liefert korrekt aus und unterscheidet Gross- und Kleinschreibung. Ich vermute da irgendwo einen Schwachfug in der PHP-Programmierung bzw. in den Einstellungen des verwendeten Smarty! Die Blödsinnigen GET-Parameter in den URLs habe ich habe ich schon per weiterleitung rausgeschmissen. Mal schauen, wann Gurgel das checkt, die Parametereinstellungen in den WMT und die Hinweise in der Robert endlich beachtet!

------
****edit****
hat sich erledigt ... habe mir etwas mühselig zurechtgefummelt

Verfasst: 19.06.2011, 19:56
von KatzmitLatz
Hallo,

um so reguläre Ausdrücke zu Testen gibts online Tools, das ist sehr hilfreich.
Suche mal nach "Regular expression test online", dann sieht man schön was wie matcht.

Ansonsten halt Manual zu regulären Ausdrücken, sprich RFTM. Die Klammern () bezeichnen das was in $ gematcht wird.

LG

Re: PHP-Code - Frage

Verfasst: 25.06.2011, 11:40
von Abraxas
chandor hat geschrieben:Hi,

meine PHP-Kenntnisse sind so ... lala ...! Könnte mir jemand eine Codezeile, aus einem von mir verwendeten Skript erklären?

Code: Alles auswählen

if (ENABLE_REWRITE == 1)
{
   preg_match ('#(.*)link(_|-)(\d+)\.htm[l]?$#i', request_uri(), $matches);
Mein Prob ist: Standardmäßig sollen html-Seiten ausgeliefert werden. Leider werden aber zusätzlich noch htm-Seiten UND verschiedenste Kreationen in Groß- und Kleinschreibung der URL mit ausgeliefert. Nach vielen Herumpopeln bin ich nun soweit, dass es nicht an der htaccess liegt.

Könnte hier ein Grund darin liegen?
Do not use preg_match() if you only want to check if one string is contained in another string. Use strpos() or strstr() instead as they will be faster.

strpos() und strstr() sind leicht zu verstehende Funktionen :)

Verfasst: 25.06.2011, 12:53
von Synonym
@Abraxas
Und was soll das bringen? Er will ja nicht prüfen, ob da ein bestimmter String drinnen steht, sondern was für einer.

Also eben der "Titel" vor dem "link" und die "id" danach.

Das mit der Groß- und Kleinschreibung hat damit aber nichts zu tun. Das #i greift in dem Fall ja nur bei den vorgegeben Werten, also dem "link", Zahlen (\d+) gibt es ja nicht in groß und klein und dem "html" am Ende. Alles andere ist ja ohnehin (.*), also beliebig.

Wenn Du das verhindern willst, dann Frage den Titel aus der DB ab, wenn dort denn der richtige ist. Vergleiche den dann mit der URL und wenn das nicht übereinstimmt, dann leite an die richtige Schreibweise weiter.

Oder, wenn die URL immer in Kleinschreibung ist / sein soll, dann nimm die URL und vergleiche sie mit strtolower(URL). Wenn das dann nicht gleich ist, dann war in URL irgendwas groß geschrieben. In dem Fall dann eben wieder an strtolower(URL) weiterleiten.

Hat so direkt aber mit dem preg_match nichts zu tun.