XHTMLforum

XHTMLforum (http://xhtmlforum.de/index.php)
-   Serveradministration und serverseitige Scripte (http://xhtmlforum.de/forumdisplay.php?f=80)
-   -   mod_rewrite: physisches verzeichnis/ keine dateiendung (http://xhtmlforum.de/showthread.php?t=54528)

chOLEk 13.11.2008 17:19

[gelöst] mod_rewrite: physisches verzeichnis/ keine dateiendung
 
Hallo,

nachdem mir beim letzten mal so schnell und gut geholfen wurde, habe ich gleich noch eine Frage.

Der IST-Zustand

Ich leite per mod_rewrite Anfragen der Art example.com/seite auf example.com/index.php?pageid=seite um:

Code:

Options -MultiViews
RewriteEngine on
RewriteBase /
RewriteRule ^([^/\.]+)/?$ /index.php?pageid=$1 [L]

Das klappt wunderbar, aber...

Problem 1 - Das Hauptproblem

In meiner Navigation gebe ich Links einfach als
HTML-Code:

<a href="irgendwas">Irgendwas</a>
an. Das klappt aber nur solange kein Verzeichnis mit dem Namen "irgendwas" existiert, denn dann "denkt" der Browser oder wer auch immer zuständig ist, dass der Link das Verzeichnis meint, was zu sehr seltsamen verhalten führt. Anstatt

example.com/irgendwas

wird

example.com/irgendwas/?pageid=irgendwas

angezeigt. Dann sieht man zwar den richtigen Inhalt (was ich schonmal seltsam finde), aber befindet sich natürlich nicht mehr im richtigen Verzeichnis, so dass alle anderen Links nun nicht mehr funktionieren.

Ich habe schon ca. 12 Stunden im Netz gesucht und auch hier im Forum und verschiedenste Lösungen ausprobiert, aber nichts hat geklappt.

Was ich also suche, ist eine RewriteRule oder RewriteCond, die verhindert, dass obiges passiert.

Wie gesagt... ich bin bisher nicht fündig geworden.

Problem 2

Obwohl es jetzt noch nicht akut ist, wird es mich wahrscheinlich eh bald jucken. Wie kann man die Rewrite-Regeln auf das Verzeichnis beschränken, in dem die .htaccess liegt, also alle Unterverzeichnisse ausschließen?


LG chOLEk

Gumbo 13.11.2008 18:28

Zum ersten Problem: Verwendest du noch mehr Regeln, die dieses Verhalten erklären könnten?

Zum zweiten Problem: durch das Suchmuster „^([^/]+)$“ gibt es nur eine Übereinstimmung, wenn der URL-Pfad aus nur einem Pfad-Segment besteht.

chOLEk 13.11.2008 22:58

Nein, ich verwende nur die angegebene Regel.

EDIT:

Vielleicht ist mod_rewrite auch nicht das Mittel der Wahl. Der Server scheint ja standardmäßig Anfragen der Art example.com/irgendwas in example.com/irgendwas/ umzuwandeln, was in vielen Fällen sicherlich sinnvoll ist. Kann man ihn (möglichst in der .htaccess) höflichst darum bitten, das zu unterlassen?

EDIT 2:

Im mod_rewrite-Forum gibt es das gleiche Problem: http://www.modrewrite.de/foren/ftopic4988.html (bislang aber auch ohne Lösung. :(

chOLEk 14.11.2008 04:13

Die Lösung
 
Ich hab's! ...nach schier endloser Suche ;)

In der .htaccess habe ich die Zeile

DirectorySlash Off

hinzugefügt. Dadurch wird verhindert das Apache bei der Anfrage

example.com/irgendwas

einen Slash anhängt, wenn das Verzeichnis irgendwas existiert.

Vielen Dank an alle, die sich Gedanken gemacht haben.


Die Moral der Geschicht':
Mit der Qual ist schneller Schluss
wenn man weiß, wonach man suchen muss!


Alle Zeitangaben in WEZ +2. Es ist jetzt 00:51 Uhr.

Powered by vBulletin® Version 3.8.11 (Deutsch)
Copyright ©2000 - 2024, vBulletin Solutions, Inc.

© Dirk H. 2003 - 2023