it-swarm.com.de

Wie richte ich mod_rewrite / htaccess für die URL-Maskierung und Weiterleitung an ein Unterverzeichnis ein?

Es ist ungefähr drei Jahre her, seit ich mit Apache und PHP gespielt habe (ich benutze Thin und Nignx;). Daher habe ich vergessen, wie eine mod_rewrite-Direktive eingerichtet wird, um alle http-Anforderungen vom Stammverzeichnis an den installierten Ordner der Anwendung weiterzuleiten.

Aktuelle Einstellungen und Einschränkungen:

  • Die Site befindet sich auf einem gemeinsam genutzten cpanel-Hosting-Dienst, der die Installation von Anwendungen als Root nicht zulässt (in meinem Buch gibt es keine Fehler bei der Versionierung und was nicht).
  • CMS-Anwendung wurde unter joomla-1.5.60/installiert
  • Ich muss /(.*) einrichten, um zu /joomla-1.5.60/$1 umzuleiten, schaue aber trotzdem im Browser nach /(.*)
  • RedirectMatch funktioniert nicht
  • Ich kann docroot aufgrund von Kontobeschränkungen nicht als Stammverzeichnis der Anwendung festlegen

Ich habe die Dokumentation von Apache durchgelesen und erhalte immer wieder eine Umleitungsschleife. Also wäre jede Hilfe, die ihr geben könnt, dankbar.

Danke: D.

1
Dwight Spencer

Falls Sie dies nicht geklärt haben, sehen Sie sich die Umschreiberegel an, die Sie in Ihrem Pastebin-Link haben

RewriteRule ^(.*)$ http://www.diviniti.cc/joomla-1.5.20/$1 [R=301,QSA,L]

hier gibt es ein paar Dinge, die deine Wünsche zunichte machen:

  • die Direktive R=301 bewirkt, dass der Browser tatsächlich "verschwindet" und die umgeschriebene URL lädt, wobei die URL im Browser geändert wird
  • ihr Wunsch, auch alle non-www Subdomains zu einer www Subdomain umzuleiten, widerspricht auch Ihrem Wunsch, den joomla Teil der URL vor der URL versteckt zu halten Browser.

Versuchen Sie stattdessen zwei Regeln:

Options +FollowSymlinks
RewriteEngine On

# 1. redirect (bounce) all non-www to www [as per Apache docs][1] - retaining query strings
RewriteCond %{HTTP_Host}   !^www\.example\.com [NC]
RewriteCond %{HTTP_Host}   !^$
RewriteRule ^/(.*)         http://www.example.com/$1 [L,R,QSA]

# 2. then, use joomla but hide the joomla dir - note the lack of 'R' directive
RewriteRule ^(.*)$ /joomla-1.5.20/$1 [QSA,L]

Wenn Sie nicht möchten, dass alle Subdomains auf "www" gesetzt werden, überspringen Sie einfach Regel Nr. 1 und lassen Sie Regel Nr. 2.

Du brauchst nicht die zweite Umschreibung, die du in deinem Pastebin hattest, für den 'root':

# Also redirect the root folder.
RewriteCond %{HTTP_Host} ^(*.)?diviniti\.cc$
RewriteRule ^(/)?$ joomla-1.5.20/index.php [L]

weil das ^(.*)$ in meinem mitgelieferten Rewrite auch mit dem Fall übereinstimmt, in dem die URL http://www.example.com/ ist

Nun ist es möglich, dass Joomla selbst mit dieser Schikane nicht zufrieden sein wird, es ist vielleicht zutiefst nicht so, als wäre er an dieser Pseudowurzel, während die Dokumentwurzel etwas anderes sagt, und es ist möglich, dass es nicht klappt.

1: http://httpd.Apache.org/docs/2.0/misc/rewriteguide.html#url "per Apache docs"

2
Gavin C