2012-03-26 13 views
0

Ich habe eine Frage über die Verwendung mehrerer .htaccess-Dateien - Ich konnte die Antwort nicht finden, nachdem ich anderswo auf Stackoverflow sah, so hoffe ich, dass Sie helfen können.Zwei Htaccess-Dateien

ich zur Zeit eine .htaccess-Datei in der Wurzel meiner Seite haben, die über eine einfache URL-Rewrite führt:

Options -MultiViews 
# CheckSpelling off 
RewriteEngine On 
RewriteBase/
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.+)$ index.php?url=$1 [L] 
ErrorDocument 404 /index.php 

Ich bin derzeit auf der zweiten Phase der Entwicklung dieser Website zu arbeiten, und ich habe ein Replikat in einem Unterordner erstellt (zB www.abcdef.com/new/). Das Problem ist, im Moment, wenn ich auf einen Link auf dieser Replikat-Site klicke, leite ich mich auf die Originalseite um, während ich möchte, dass sie auf die entsprechende Seite im neuen Ordner/geht. Ich habe eine andere .htaccess-Datei in diesem neuen/Ordner abgelegt, die jedoch keine spürbare Wirkung hat:

Options -MultiViews 
# CheckSpelling off 
RewriteEngine On 
RewriteBase /new/ 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.+)$ /new/index.php?url=$1 [L] 
ErrorDocument 404 /index.php 

Also meine Frage ist: ist es zulässig, eine andere .htaccess-Datei in einem Unterordner wie diese haben ? Und wenn ja, warum funktionieren die obigen Zeilen nicht?

Vielen Dank im Voraus für irgendwelche Ideen zu diesem Thema!

G

+0

Sie können so viele haben.Htaccess-Ebenen, wie Sie möchten, aber sie werden in der Reihenfolge der Verzeichnisbaumtiefe verarbeitet. Wenn ein höherer .htaccess an anderer Stelle umgeleitet wird, bevor ein niedrigerer .htaccess erreicht wird, wird der untere nicht einmal geladen/geparst/ausgeführt. –

Antwort

0

Sie sagen

Das Problem ist im Moment, wenn ich einen Link auf diese Replik-Website klicken, es leitet mich an die Wurzel, Originalseite, während ich es das Äquivalent hinwollen Seite im neuen/Ordner.

Könnte es sein, dass Sie absolute Links in Ihren Seiten verwenden und keine relativen? Zum Beispiel, wenn ein Link wie "/sample" aussieht, wenn in Ihrer Hauptwebsite wird es zu http://.../sample verknüpfen und dasselbe gilt, wenn der Link innerhalb einer Seite unter "/new/" ist. Wenn Sie nur "sample" verwenden würden, würde das als http://..../sample oder http://...../new/sample aufgelöst werden, abhängig von der URL der Seite.

+0

Danke, Sie haben Recht - ich verwende absolute Links, also/Beispiel. Tatsache ist, dass es Hunderte dieser Links auf der ursprünglichen Site gibt, also kann ich sie nicht ändern. Weißt du, ob es eine Möglichkeit gibt, sie umzubenennen, um in den Unterordner zu gelangen? – GluePear

+0

Ich glaube nicht, dass es eine schnelle Lösung dafür gibt. Normalerweise sollten sie nicht mit einem "/" beginnen. Können Sie eine Suche in Dateien für '"/'? Vielleicht findet diese Suche alle Ihre" falsch verwurzelten "hrefs? – CyberDude

+0

Ok, irgendwo zu bekommen. Die meisten Links sind in einer db, also habe ich den Code geändert schreibt sie auf die Seite, um das anfängliche "/" zu entfernen. Jedoch schreiben diese immer noch in die Wurzel! Ich dachte, das könnte die Antwort auf meine Probleme gewesen sein ... – GluePear

0

in einem Unterverzeichnis eine zweite .htaccess-Datei Nachdem sollte kein Problem sein, und soweit ich das beurteilen kann, Ihre zwei gut aussehen.

Sind Sie sicher, dass die Links auf der Website korrekt sind? (ex, sie sind /new/foo, nicht nur /foo)?

+0

Nein, die Links sind nur zu/foo, nicht zu/new/foo. Ich hatte gehofft, dass ich die vorhandenen Links (von denen es Hunderte gibt) beibehalten und sie an den lokalen Ordner (neu /) umleiten kann. – GluePear

+0

Das würde bedeuten, den HTML-Inhalt neu zu schreiben, was 'mod_rewrite' nicht tut. Du könntest eine schreckliche, schreckliche Magie machen, indem du das Referrer-Feld kontrollierst ... Aber das wäre wirklich ein letzter Ausweg, da es brechen würde, wenn jemand einen Link kopiert und fügt. –

+0

David, danke für deine Hilfe, du und cyberdude hatten recht, und jetzt habe ich die absoluten Links optimiert, die funktionieren. Prost. – GluePear

2

Es ist möglich, mehrere .htaccess-Dateien zu haben, und das System ist so konzipiert, dass es so funktioniert, wie Sie es wollen.

Sie setzen RewriteBase, die explicitly sets the base URL-path (not filesystem directory path!) for per-directory rewrites.

Es scheint also so, als würden Ihre Anfragen in /new/new/index.php umgeschrieben werden, ein Pfad und Verzeichnis, das wahrscheinlich nicht in Ihrem Dateisystem existiert (also nicht Ihre RewriteCond s erfüllt) und in Ihre /index.php 404 umgeleitet wird.

Als Test, versuchen Sie vielleicht die ErrorDocument an sich ändernde:

ErrorDocument 404 /new/index.php

Wenn Sie sehen, neu geschrieben werden Anrufe an diese gehen dann könnte es in der Tat Ihr RewriteBase sein.

+0

Sie gehen nicht zum 404 - sie gehen auf die richtige Seite, aber auf der ursprünglichen Seite, nicht die Kopie in neuen /. Das liegt wahrscheinlich daran, dass ich, wie CyberDude unten sagt, absolute Links verwende. Danke für deine Antwort. – GluePear

Verwandte Themen