4 Stimmen

Anwendung von mod_rewrite-Regeln NACH der Anwendung von DirectoryIndex

Meine Hosting-Firma hat vor kurzem ein Upgrade von Apache 1 auf Apache 2 durchgeführt, und ich habe angefangen, ein ganz anderes Verhalten mit meinem mod_rewrite-Zeug zu beobachten.

Hier ist meine .htaccess-Datei:

DirectoryIndex blog.html

# Various rewrite rules.
<IfModule mod_rewrite.c>
  RewriteEngine on

  # Rewrite current-style URLs of the form 'showpage.php?url=x'.
  RewriteRule ^(.*\.html)$ showpage.php?url=$1 [L,QSA]

</IfModule>

Wenn Sie früher mit Apache 1 zu http://mysite.com/ dann würde der DirectoryIndex zuerst wirksam werden ( http://mysite.com/blog.html ) und dann würde die RewriteRule das in http://mysite.com/showpage.php?url=/blog.html

Wenn Sie jetzt mit Apache 2 auf http://mysite.com/blog.html wird es wie erwartet umgeschrieben, aber wenn Sie zu http://mysite.com/ wird die Datei vanilla blog.html angezeigt, ohne dass sie in showpage.php umgeschrieben wird. Die RewriteRule wird also angewendet vor tritt der DirectoryIndex in Kraft.

Neben dem Hinzufügen einer zusätzlichen Regel explizit für die Root-Seite (was mühsam sein wird, da ich alle Unterverzeichnisse berücksichtigen müsste, die ebenfalls einen DirectoryIndex haben), kennt jemand eine Möglichkeit, Apache 2 dazu zu bringen, die RewriteRule anzuwenden nach Anwendung des DirectoryIndex?

0 Stimmen

Dies funktioniert bei mir mit Apache 2.2.13. Welche Apache-Version verwenden Sie?

0 Stimmen

Ich würde gerne hören, ob Sie jemals eine gute Antwort auf diese Frage bekommen haben. Ich stecke fest bei der Neuimplementierung der Server-Kernfunktionalität (Test auf das Vorhandensein von Verzeichnissen, Anhängen des abschließenden Schrägstrichs) in einer RewriteCond und schlimmer noch, ich habe mehrere index.* Dinge in DirectoryIndex und es sieht so aus, als müsste ich Folgendes hinzufügen -f Tests auch für sie. Die Klumpen häufen sich um das Problem, dass die Neufassung in der falschen Phase angewendet wird.

1voto

Gumbo Punkte 617646

Versuchen Sie diese Regel anstelle der DirectoryIndex Richtlinie:

RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.*)/?$ $1/blog.html

0 Stimmen

Ich denke, er will den DirectoryIndex nicht entfernen/ersetzen.

0 Stimmen

@ax: Dann sollte er es zunächst zusätzlich zum DirectoryIndex Richtlinie.

0 Stimmen

Als Hinweis sei daran erinnert, dass %{REQUEST_FILENAME} gibt den Pfad zurück, der sich in docroot befindet. Daher müssen Sie Mai müssen Sie die Docroot folgendermaßen vorangestellt haben RewriteCond /var/www%{REQUEST_FILENAME} -d

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X