Installation in Unterverzeichnis: Unterschied zwischen den Versionen

Aus Contao Community Documentation

(Aufruf Frontend-Seiten)
Zeile 272: Zeile 272:
 
==Aufruf Frontend-Seiten==
 
==Aufruf Frontend-Seiten==
 
Folgendes sollte nun funktionieren (an Hand der Beispielvorgaben):
 
Folgendes sollte nun funktionieren (an Hand der Beispielvorgaben):
 +
 
'''Aufrufe an Contao'''
 
'''Aufrufe an Contao'''
 
*Aufruf per "http://www.meinedomain.de/index.html" => geht ok an contao
 
*Aufruf per "http://www.meinedomain.de/index.html" => geht ok an contao

Version vom 5. September 2011, 18:15 Uhr

betrifft
Contao Version ab Version 2.10
Extensions FolderURL

Ausgangssituation

Contao soll auf einem Server in einem eigenen Unterverzeichnis installiert werden. Dies kann aus verschiedenen Gründen erforderlich sein, beispielsweise:

  1. um das Rootverzeichnis sauber und übersichtlich zu halten
  2. weil mehrere Sites aus einem Rootverzeichnis zu hosten sind
  3. weil parallel zu Contao auch andere Applikationen gespeichert werden sollen
  4. weil neben den dynamischen Seiten von Contao auch statische Seiten gehostet werden
  5. usw.

Das Ziel

Unter den unten beschriebenen Umgebungsbedingungen soll folgendes umgesetzt werden (alle Pfade sind nur Beispiele)

  1. Durch Aufruf von "http://www.meinedomain.de/" oder bei lokaler Installation "http://localhost/" soll die index.php in "www/cms/" aufgerufen werden
  2. Der Aufruf der Contao Seiten soll durch z.B. "http://www.meinedomain.de/index.html" oder "http://www.meinedomain.de/unterseiten/meine_unterseite.html" mit leicht lesbaren und suchmaschinenfreundlichen URLs erfolgen. Zu diesem Zweck ist auch FolderURL installiert.
  3. Die Navigation innerhalb der mit Contao realisierten Webiste soll ohne den Pfadteil .../cms/.. erfolgen. Also NICHT: "http://www.meinedomain.de/cms/unterseite/meine_unterseite.html"
  4. Wird eine statische Website im www-Rooverzeichnis z.B. "http://www.meinedomain.de/gibts_in_echt.html" aufgerufen, so soll diese auch angezeigt werden.
  5. Wird eine andere Seite oder Anwendung in einem Unterverzeichnis aufgerufen z.B. "http://www.meinedomain.de/onlinegame/" soll auf dieses geroutet werden.

Die technischen Umgebungsbedingungen

Diese Anleitung bezieht sich auf die folgenden beispielhaften Umgebungsbedingungen:

  1. Der Server (oder die lokale Installation) hat ein Wurzelverzeichnis, z.B. "www". Dieses wird nach Eingabe der domain "http://www.meinedomain.de/" oder bei lokaler Installation "http://localhost/" aufgerufen.
  2. Contao ist in ein Unterverzeichnis dieses "www" Wurzelverzeichnisses kopiert, z.B: "cms". Der Pfad zu Contao lautet nun www/cms/. In diesem liegen nun die Ordner contao, plugins, system, templates, tl_files, typolight sowie u.a. die Datei .htaccess.default und die index.php
  3. Die Erweiterung "FolderURL" ist in Contao installiert
  4. Im Wurzelverzeichnis "www" befinden sich weitere Unterordner und/oder html/php files, die andere Anwendungen bzw. statische Webseiten beinhalten, die bei Bedarf erreichbar sein müssen.

Die Domainnamen, Pfade und Seiten sind natürlich nur Beispiele und müssen an die jeweilige Installation angepasst werden!

Die Umsetzung

Grundsätzlich gibt es mehrere Lösungsvarianten. Die hier beschriebene Variante erfolgt unter Nutzung der Apache .htaccess Dateien. Diese können entweder offline mit einem beliebigen Editor erstellt/bearbeitet und dann per FTP auf den Server hochgeladen werden oder per FTP-fähigem Editor direkt online editiert werden (z.B. mit Notepad++ http://notepad-plus-plus.org/ - gibt es auch als portable Version unter http://portableapps.com/ bzw. http://portableapps.com/de )

Schritt 1 - Installation im Unterverzeichnis

Contao wurde in ein Unterverzeichnis des Wurzelverzeichnisses am Server kopiert. Beispiel: Wurzelverzeichnis Server lautet "www" Installationsverzeichnis Contao lautet "cms". Der Pfad zu Contao lautet nun www/cms/. (siehe Pkt 2. technische Umgebungsbedingungen)

Schritt 2 - Anpassen der .htaccess im WURZELVERZEICHNIS

Als erstes ist die .htaccess im Wurzelverzeichnis anzupassen:

 RewriteEngine On
 RewriteBase /
 
 # in der folgenden Zeile den Text "cms"entsprechend dem gewählten Unterverzeichnis für Contao ggf. ändern
 RewriteCond %{REQUEST_URI} !^cms/.*
 RewriteCond %{REQUEST_FILENAME} !-f
 RewriteCond %{REQUEST_FILENAME} !-d [OR]
 RewriteCond %{REQUEST_URI} ^/$
 
 # in der folgenden Zeile ebenfalls den Text "cms" entsprechend dem gewählten Unterverzeichnis für Contao ändern
 RewriteRule ^(.*) /cms/$1 [L]
 RewriteRule .*\.html$ index.php [L]

Erklärung: Zuerst wird das Umschreiben von URLs aktiviert, wobei als Basis das aktuelle Verzeichnis festgesetzt wird (" RewriteEngine On " und " RewriteBase / ").

Anschließend werden URLs die direkt auf das Unterverzeichnis "cms" verweisen vom Umschreiben ausgenommen (" RewriteCond %{REQUEST_URI} !^cms/.* ").

Sofern die in der URL aufgerufenen Verzeichnisse oder Files tatsächlich existieren, findet ebenfalls kein Umschreiben statt (" RewriteCond %{REQUEST_FILENAME} !-f " und " RewriteCond %{REQUEST_FILENAME} !-d [OR] ").

Alle anderen Aufrufe werden um das Unterverzeichnis ergänzt (" RewriteRule ^(.*) /cms/$1 [L] ").

Falls eine .html Datei in der URL angegeben ist, wird diese auf "index.php" umgeschrieben (" RewriteRule .*\.html$ index.php [L] ").

So wird erstmal aus http://www.meinedomain.de/index.html die URL http://www.meinedomain.de/cms/index.php - was weder Nutzer noch Suchmaschine zu sehen bekommen!

Zu beachten ist, dass sich im Wurzelverzeichnis keine index.php oder index.html Datei befinden darf. (Achtung auf Reste voheriger Installationen ;-)

Schritt 3 - Anpassen der .htaccess im INSTALLATIONSVERZEICHNIS

Im Installationsverzeichnis von Contao kann nun praktisch unverändert die mitgelieferte .htaccess.default verwendet werden (natürlich muss die auf .htaccess umbenannt werden. Also das ".default" raus aus dem Dateinamen! Hier die Beispielversion:

##
# Contao Open Source CMS
# Copyright (C) 2005-2011 Leo Feyer
#
# Formerly known as TYPOlight Open Source CMS.
#
# This program is free software: you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation, either
# version 3 of the License, or (at your option) any later version.
# 
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# Lesser General Public License for more details.
# 
# You should have received a copy of the GNU Lesser General Public
# License along with this program. If not, please visit the Free
# Software Foundation website at <http://www.gnu.org/licenses/>.
#
# PHP version 5
# @copyright  Leo Feyer 2005-2011
# @author     Leo Feyer <http://www.contao.org>
# @license    LGPL
##
 
##
# Disable ETags
# @see http://developer.yahoo.com/performance/rules.html#etags
##
FileETag None
 
##
# Prevent access to the Contao template files
##
<FilesMatch "\.(tpl|html5|xhtml)$">
  Order allow,deny
  Deny from all
</FilesMatch>
 
<IfModule mod_mime.c>
 
  ##
  # Serve the correct content type for .htc files (CSS3 PIE)
  # @see http://css3pie.com/documentation/known-issues/#content-type
  ##
  AddType text/x-component .htc
 
</IfModule>
 
<IfModule mod_deflate.c>
 
  ##
  # Use mod_deflate to compress JavaScript, CSS, XML, HTML and PHP files.
  # @see http://developer.yahoo.com/performance/rules.html#gzip
  ##
  <FilesMatch "\.(css|js|xml|html?|php)$">
    SetOutputFilter DEFLATE
  </FilesMatch>
 
</IfModule>
 
<IfModule mod_headers.c>
 
  ##
  # Disable ETags
  # @see http://developer.yahoo.com/performance/rules.html#etags
  ##
  Header unset ETag
 
  ##
  # Add a Vary Accept-Encoding header for the compressed resources. If you
  # modify the file types above, make sure to change them here accordingly.
  # @see http://developer.yahoo.com/performance/rules.html#gzip
  ##
  <FilesMatch "\.(js|css|xml|gz)$">
    Header append Vary Accept-Encoding
  </FilesMatch>
 
</IfModule>
 
<IfModule mod_expires.c>
 
  ##
  # Activate the module
  ##
  ExpiresActive On
 
  ##
  # Specify an expiration 30 days in the future for images, JavaScripts and
  # CSS files. Edit or remove the lines to set up your own expiration logic.
  # @see http://developer.yahoo.com/performance/rules.html#expires
  ##
  ExpiresByType image/png A2592000
  ExpiresByType image/gif A2592000
  ExpiresByType image/jpg A2592000
  ExpiresByType image/jpeg A2592000
  ExpiresByType text/javascript A2592000
  ExpiresByType application/x-javascript A2592000
  ExpiresByType application/javascript A2592000
  ExpiresByType text/css A2592000
  ExpiresByType image/x-icon A2592000
 
</IfModule>
 
<IfModule mod_rewrite.c>
 
  ##
  # Activate the module
  ##
  RewriteEngine On
 
  ##
  # Set the RewriteBase if your Contao installation is in a subdirectoy and
  # the rewrite rules are not working properly. Usage examples:
  #
  #   RewriteBase /contao-2.9.0
  #   RewriteBase /path/to/contao
  #
  # Uncomment the following line to set the RewriteBase.
  ##
  RewriteBase /
 
  ##
  # Contao usually does not pass absolute URLs via GET, therefore the
  # following rules block all requests that try to pass a URL or the /etc/
  # directory as parameter (malicious requests).
  ##
  RewriteCond %{REQUEST_URI} (ftp|https?):|/etc/ [NC,OR]
  RewriteCond %{QUERY_STRING} (ftp|https?):|/etc/ [NC]
  RewriteRule .* - [F,L]
 
  ##
  # Uncomment the following lines and replace "domain.com" with your domain
  # name to redirect requests without "www" to the correct domain. 
  ##
  #RewriteCond %{HTTP_HOST} ^domain\.com [NC]
  #RewriteRule (.*) http://www.domain.com/$1 [R=301,L]
 
  ##
  # If you cannot use mod_deflate, uncomment the following lines to load a
  # compressed .gz version of the bigger Contao JavaScript and CSS files.
  ##
  #AddEncoding gzip .gz
  #<FilesMatch "\.js\.gz$">
  #  AddType "text/javascript" .gz
  #</FilesMatch>
  #<FilesMatch "\.css\.gz$">
  #  AddType "text/css" .gz
  #</FilesMatch>
  #RewriteCond %{HTTP:Accept-encoding} gzip
  #RewriteCond %{REQUEST_FILENAME} \.(js|css)$
  #RewriteCond %{REQUEST_FILENAME}.gz -f
  #RewriteRule ^(.*)$ $1.gz [QSA,L]
 
  ##
  # Do not rewrite requests for static files or folders such as style sheets,
  # images, movies or text documents.
  ##
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
 
  ##
  # By default, Contao adds ".html" to the generated URLs to simulate static
  # HTML documents. If you change the URL suffix in the back end settings, make
  # sure to change it here accordingly!
  #
  #   RewriteRule .*\.html$ index.php [L]   # URL suffix .html
  #   RewriteRule .* index.php [L]          # No URL suffix
  #   RewriteRule .*\.txt$ index.php [L]    # URL suffix .txt
  #
  # If you are using mod_cache, it is recommended to use the RewriteRule below,
  # which adds the query string to the internal URL:
  # 
  #   RewriteRule (.*\.html)$ index.php/$1 [L]
  #
  # Note that not all environments support mod_rewrite and mod_cache.
  ##
  # RewriteRule .*\.html$ index.php [L]
  # Rewrite TYPOlight URLs
 
  RewriteRule .*$ index.php [L]
 
</IfModule>

Zu beachten ist:

  • die RewriteBase der .htaccess im Installationsverzeichnis darf KEIN Unterverzeichnis beinhalten: "RewriteBase /" das wurde ja schon von der .htaccess im Wurzelverzeichnis übernommen!
  • die RewriteRule am Ende der .htaccess ist auf "RewriteRule .*$ index.php [L]" geändert. Dadurch werden auch Dateinamen gültig aufgerufen, wenn der User das abschließende .html vergisst oder den Dateinamen irrtümlich als Pfad eingibt.

Schritt 4 - Anpassen im Contao Backend

Im Contao Backend ist der Installationspfad unter Einstellungen > Globale Einstellungen > Relativer Pfad zum Contao-Verzeichnis LEER zu lassen (weil diese Aufgabe von der .htaccess im Wurzelverzeichnis übernommen wird).

Ergebnis: Aufruf der Seiten

Aufruf Frontend-Seiten

Folgendes sollte nun funktionieren (an Hand der Beispielvorgaben):

Aufrufe an Contao

Aufrufe außerhalb von Contao

Aufruf Backend-Seiten

Das Contao Backend kann nun entweder über

http://www.meinedomain.de/contao/ 

oder über

http://www.meinedomain.de/cms/contao

erfolgen.

Ansichten
Meine Werkzeuge

Contao Community Documentation

Programmierer brauchen viel Bit, auch wenn es Beck's ist.

Christian Schiffler
Navigation
Verstehen
Verwenden
Entwickeln
Verschiedenes
Werkzeuge