Rewrite Modus

Auch verfügbar in English



1. Apache mod_rewrite

WackoWiki mit mod_rewrite verwenden


Wenn Apache das Modul mod_rewrite einkompiliert hat (und dein Provider "RewriteEngine On" auch ausführen lässt...),
ist es ganz einfach, URL rewriting einzustellen:

  • kopiere die .htaccess-Datei, die bei WackoWiki mitgeliefert wird in dein Installationsverzeichnis
  • setze in der Konfiguration 'rewrite_mode' => 1

1.1. Grundlagen

Mod_rewrite ist ein Modul für den Apache Webserver und schreibt die angeforderte URLs on the fly um. Es funktioniert beides in per-server context (Apache v2.x: apache2.conf) und per-directory context (.htaccess). Detaillierte Informationen findet man unter Apache Module mod_rewrite und URL Rewriting Guide.


  1. mod_rewrite ermöglicht:
    • http://www.example.com/Download
  2. mod_rewrite verhindert:
    • http://www.example.com/?page=Download

1.2. Wie man mod_rewrite aktiviert

Du benötigst einen Apache Webserver auf dem WackoWiki läuft und das Module mod_rewrite muss installiert und aktiviert sein.


mod_rewrite in der Apache Konfigurationsdatei (http.conf oder apache2.conf):
/apache/conf/http.conf


aktiviert:

LoadModule rewrite_module modules/mod_rewrite.so	

deaktiviert

#LoadModule rewrite_module modules/mod_rewrite.so	

1.2.1. AllowOverride All

Stelle sicher dass deine .htaccess Dateien nicht ignoriert werden: Stelle in deiner Apache Konfigurationsdatei (http.conf oder apache2.conf) für das Verzeichnis in dem dein Wiki ist folgendes sicher:
/apache/conf/http.conf

AllowOverride None	

nicht gesetzt ist, weil sonst .htaccess Dateien werden ignoriert.

AllowOverride All	

Beispiel mit AllowOverride All:
/apache/conf/http.conf

#Wacko URL-rewriting
<Directory "/real/path/to/yoursubdir">
    Options Indexes FollowSymLinks Includes ExecCGI
    #
    # AllowOverride controls what directives may be placed in .htaccess files.
    # It can be "All", "None", or any combination of the keywords:

    #   Options FileInfo AuthConfig Limit
    #
    AllowOverride All
    Order allow,deny
    Allow from all
</Directory>	

1.3. mit .htaccess

Falls man keine Rechte besitzt, um die httpd.conf / apache2.conf Datei zu bearbeiten (z.B. bei Shared Hosting), dann kann man die .htaccess-Methode nutzen, mit folgendem Inhalt:


In der Datei befinden sich keine vom Benutzer zu ändernde Bestandteile. Falls du irgendetwas durch Ändern der .htaccess beheben willst, dann bist du sehr wahrscheinlich auf dem falschen Weg.


wacko/.htaccess

# No user serviceable parts inside
# If you want to fix anything by tuning htaccess - you're possibly on the wrong path

<IfModule mod_env.c>
	SetEnv HTTP_MOD_ENV on
</IfModule>

<IfModule mod_rewrite.c>
	<IfModule mod_env.c>
		SetEnv HTTP_MOD_REWRITE on
	</IfModule>
	RewriteEngine on
	RewriteRule ^ index.php [QSA,L]
</IfModule>

<IfModule !mod_rewrite.c>
<FilesMatch \.php$>
	# Apache 2.4
	<IfModule mod_authz_core.c>
		Require all denied
	</IfModule>
	# Apache 2.2
	<IfModule !mod_authz_core.c>
		Order Allow,Deny
		Deny from all
	</IfModule>
</FilesMatch>

<FilesMatch "^(admin|index)\.php$">
	# Apache 2.4
	<IfModule mod_authz_core.c>
		Require all granted
	</IfModule>
	# Apache 2.2
	<IfModule !mod_authz_core.c>
		Order Allow,Deny
		Allow from All
		Deny from None
	</IfModule>
</FilesMatch>
</IfModule>	

Die Datei .htaccess ist im Installationspaket von WackoWiki, welches du heruntergeladen hast, enthalten, und findet sich dort im wacko/ Ordner.
Falls du sie nicht findest, erstelle sie einfach (Zugriffserlaubnis: -rwxr-xr-x).

1.3.1. Anpassungen für Domain Factory

Für Wacko.5.0 habe ich in der .htaccess lediglich die Zeile

RewriteBase /	

einfügen müssen. d(f) voelzke (18.01.2012 23:17)

1.4. ohne .htaccess

Wenn du die die httpd.conf / apache2.conf Datei direkt bearbeiten willst, bitte achte darauf, dass du die .htaccess Datei in deinem Wacko Ordner löschst oder umbenennst.
Füge jetzt die folgenden Zeilen in deine Apache Konfigurationsdatei:
/apache/conf/http.conf

#Wacko URL-rewriting

    Options Indexes Includes FollowSymLinks MultiViews
    AllowOverride All
    RewriteEngine on
    RewriteRule ^ index.php [QSA,L]
    Order allow,deny
    Allow from all	

Starte deinen Webserver neu, damit die Änderungen aktiv werden!

2. Nginx rewrite

Im Rewrite-Modus wirkt sich die Nginx-Einstellung auf die URL des Verwaltungsbereichs aus. Der folgende Code kann verwendet werden.


In other locales, parse the URL


if (-f $request_filename/index.html){
	rewrite (.*) $1/index.html break;
}
if (-f $request_filename/index.php){
	rewrite (.*) $1/index.php;
}
if (!-f $request_filename){
	rewrite (.*) /index.php;
}