2016-05-25 13 views
0

Meine Hauptdomäne ist an meine public_html-Ordner gebunden, aber ich benutze eine. Htaccess Redirect, um das Stammverzeichnis in ein Unterverzeichnis im Ordner zu ändern, um es einfacher zu machen, mehrere Standorte zu hosten. Beispiel:. Htaccess Redirect Unterverzeichnis zu Root-Problem

public_html 
-- .htaccess 
-- site1 
---- .htaccess 
-- site2 
-- site3 

Die .htaccess-Datei im Stammverzeichnis wird wie folgt:

RewriteEngine on 

RewriteCond %{HTTP_HOST} ^(www.)?example.com$ 
RewriteCond %{REQUEST_URI} !^/subdirectory/ 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ /subdirectory/$1 
RewriteCond %{HTTP_HOST} ^(www.)?example.com$ 
RewriteRule ^(/)?$ subdirectory/ [L] 

Dies funktioniert gut, aber ich denke, es gibt Probleme mit diesem und der .htaccess-Datei in meinem site1 Verzeichnis. Wenn ich die URL eingabe, wird sie manchmal an example.com/site1 weitergeleitet. Daher erscheint die Website auf example.com und example.com/site1 genauso, aber ich möchte nicht, dass sie als example.com/site1 angezeigt wird. Die zweite .htaccess-Datei im Verzeichnis site1 wird unten angezeigt.

RewriteEngine on 

# Change default directory page 
DirectoryIndex /home/ 

# Remove .php extension 
RewriteCond %{THE_REQUEST} ^GET\ /[^?\s]+\.php 
RewriteRule (.*)\.php$ /$1/ [L,R=301] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_URI} ^/(.+)/$ 
RewriteCond %{DOCUMENT_ROOT}/%1.php -f 
RewriteRule ^(.*)/$ $1.php [L] 

# Ensure all directory URLs have a trailing slash 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_URI} !\/$ 
RewriteCond %{REQUEST_URI} !\/[^\/]*\.[^\/]+$ 
RewriteRule .* http://%{HTTP_HOST}%{REQUEST_URI}/ [L,R=301] 

# Same for HTTPS 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_URI} !\/$ 
RewriteCond %{REQUEST_URI} !\/[^\/]*\.[^\/]+$ 
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI}/ [L,R=301] 

# Redirect default error page to home page 
RewriteCond %{QUERY_STRING} ^$ 
RewriteRule ^(/|error/)?$ /home/ [R=301,L] 

# Error Documents 
ErrorDocument 400 /error/?e=400 
ErrorDocument 401 /error/?e=401 
ErrorDocument 403 /error/?e=403 
ErrorDocument 404 /error/?e=404 
ErrorDocument 500 /error/?e=500 

# Prevent viewing of htaccess file 
<Files .htaccess> 
    order allow,deny 
    deny from all 
</Files> 

Ich bin mir nicht sicher, ob es ein Problem mit den verschiedenen Regeln für das Umschreiben ist verwende ich, dass die URL beeinflusst, aber ich würde jede Hilfe dankbar, wenn sie gelöst werden können.

Vielen Dank im Voraus und ich entschuldige mich, wenn meine Beschreibung nicht großartig ist.

Antwort

1

Versuchen

# Ensure all directory URLs have a trailing slash 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_URI} !\/$ 
RewriteCond %{REQUEST_URI} !\/[^\/]*\.[^\/]+$ 
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1/ [QSA,L,R=301] 

# Same for HTTPS 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_URI} !\/$ 
RewriteCond %{REQUEST_URI} !\/[^\/]*\.[^\/]+$ 
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [QSA,L,R=301] 

Es funktioniert für mich. % {REQUEST_URI} enthält site1, also verwende es nicht. QSA fügt URL-Parameter wie? Param1 = val1 hinzu & param2 = val2 Wenn Sie sie nicht verwenden, können Sie QSA weglassen. Auch beim Testen ersetzen R = 301 bis R = 302 (temporäre Umleitung), sonst merkt sich Ihr Browser die Regel und sendet keine Anfrage erneut.

+0

Vielen Dank für Ihre Antwort! Wenn Ihre Änderungen aktiviert sind, wenn ich die URL example.com/home besuche und den abschließenden Schrägstrich absichtlich weggebe, wird der Standort aufgrund von zu vielen Weiterleitungen nicht geladen, anstatt den abschließenden Schrägstrich zu enthalten. Es kann hilfreich hinzufügen Ich habe ein Unterverzeichnis innerhalb des site1 Ordner für die Website Vermögenswerte mit einer .htaccess-Datei enthält: 'Optionen -Indexes RewriteEngine On RewriteBase/ # Disallow Verzeichniszugriff IndexIgnore *' und Das Problem tritt meist auf, wenn der nachgestellte Schrägstrich im Ordner "Assets" weggelassen wird. – JakeGriffin

+1

Entschuldigung, im ersten Block wurde ein Schrägstrich hinzugefügt. –

+0

Danke Vasiliy, das funktioniert für die Seiten im Hauptverzeichnis! Allerdings habe ich oben ein Asset-Unterverzeichnis mit einer .htaccess-Datei, die den Zugriff blockiert. Wenn ich zu example.com/assets/ navigiere, funktioniert es gut, aber wenn ich den abschließenden Schrägstrich weglasse, wird es zu example.com/site1/assets/ umgeleitet. Wie kann das gelöst werden? – JakeGriffin