Apache: So finden Sie die Ursache für 404, wenn die Rewriterule ignoriert wird

Apache: So finden Sie die Ursache für 404, wenn die Rewriterule ignoriert wird

Ich habe also dies

RewriteCond %{REQUEST_URI} (da-dk)/(.*)(/|\.php)$
RewriteRule ^(da-dk)/(.*)(/|\.php)$ /$2$3 [L]

Aber aus irgendeinem Grund gibt example.com/da-dk/ "404 - nicht gefunden" aus.

Ich möchte versuchen zu verstehen, warum Apache zu dieser Schlussfolgerung gelangt - also welche Regeln es gefunden und befolgt hat

Antwort1

Vorausgesetzt, dies befindet sich in der Stammdatei .htaccess...

RewriteRule ^(da-dk)/(.*)(/|\.php)$ /$2$3 [L]

Eine Anforderung für /da-dk/(die mit dem URL-Pfad übereinstimmt da-dk/) stimmt nicht mit dem regulären Ausdruck überein, ^(da-dk)/(.*)(/|\.php)$daher wird diese Regel nicht verarbeitet/befolgt.

Wenn Sie also keine anderen Regeln haben, die dieser Anfrage entsprechen, dannNEINRegeln werden befolgt, daher die 404. (Was die Regeln angeht, die "angetroffen" werden, nun, alle anderen Regeln, die Sie haben, sindangetroffen.)

Übrigens, das VorangegangeneZustand( RewriteCondRichtlinie) ist hier völlig überflüssig und sollte entfernt werden. Es tut nichts weiter als das, was dieRewriteRule Musterhat sich bereits etabliert.

Insbesondere würde diese Regel (regulärer Ausdruck) auf URLs der Form zutreffen:

  • /da-dk/.php
  • /da-dk/<foo>/
  • /da-dk/<foo>.php
  • /da-dk/<foo>/<bar>/<baz>/
  • /da-dk/<foo>/<bar>/<baz>.php

Es passt nicht:

  • /da-dk/<foo>
  • /da-dk/

Diese Regel entfernt einfach das /da-dkPräfix der angeforderten URL (vermutlich in derHoffnungdass die umgeschriebene URL mit einem Dateisystemverzeichnis oder einer Datei übereinstimmt).

Wenn /da-dk/zurück zur Wurzel geschrieben werden soll, kann die obige Regel geändert werden, um dies zu ermöglichen (dabei kann sie auch etwas vereinfacht werden). Versuchen Sie stattdessen beispielsweise Folgendes:

RewriteRule ^da-dk/(.+(/|\.php))?$ /$1 [L]

da-dk/Hier wird der Teil des URL-Pfades nachOptional(In diesem Fall $1ist die Rückreferenz effektivleer.)

Durch Ändern des Quantifizierers von *in +wird außerdem die Übereinstimmung mit der (unsinnigen) URL vermieden /da-dk/.php.

Kein Notwendigkeit fürerfassendas da-dkTeilstück (erstes Pfadsegment), da dieses nicht imAuswechslungZeichenfolge (2. Argument).

Die $1Rückreferenz enthält jetzt den gesamten URL-Pfad nach dem Präfix. ( Und da-dk/ist nicht mehr erforderlich, wie ursprünglich.)$2$3

verwandte Informationen