Apache .htaccess mod_rewrite und saubere Urls
-
06-07-2019 - |
Frage
Ok. So baue ich diese Seite, die durch zwei unterschiedliche Domänen zugänglich ist. So kann ich nicht RewriteBase in meinem .htaccess verwenden. Die Regeln (siehe unten) Ich verwende, um dieses Problem zu funktionieren scheinen gut zu funktionieren. Allerdings, wenn ich die folgenden .htaccess-Einstellungen auf meiner lokalen Box mit sauberem URLS (WAMP) verwende es funktioniert gut, aber der Moment, ich benutze diese auf dem Live-Server (Shared-Hosting-LAMP) jede Seite, die ich auf Anzeigen die Homepage navigieren (die ein unter dem Index, obwohl ich denke), auch die URL im Browser eindeutig aktualisiert wird.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^/domain1.com/(.*)$
RewriteRule ^(.*)$ /domain1.com/index.php?q=$1 [L,QSA]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^/domain2.com/(.*)$
RewriteRule ^(.*)$ /domain2.com/index.php?q=$1 [L,QSA]
</IfModule>
Jede Hilfe oder Ideen werden sehr geschätzt.
- Luke
Lösung
Wahrscheinlich das Beste, was zu tun ist, das Problem auf Ihrem lokalen Rechner zu reproduzieren und wieder auftauchen RewriteLogLevel so können Sie sehen, was los ist. (Da Sie in der Regel nicht die Protokollebene auf Shared-Hosting ändern)
Unter Umständen können Sie das Problem zu „simulieren“, indem ein Verzeichnis Rewrite in Apache Hauptkonfiguration zu tun. (Das Shared-Hosting offensichtlich hat sein eigenes Umschreiben, bevor es die .htaccess bekommt!) Wenn Sie das Problem nicht reproduzieren können, können Sie Trial-and-Error-Debugging auf dem Remote-Server starten müssen. Das ist hässlich, aber wenn es Ihre einzige Option:
Mit der R (Redirect) Flag in Ersetzungen an Ihren Browser jede neu geschrieben URL zurück zu senden. Verwenden Sie TELNET (oder ein entsprechender Browser-Add-on), um die HTTP-Antworten zu überprüfen.
Vergessen Sie nicht, Punkte in regulären Ausdrücke zu entkommen!
Als Randnotiz werden die RewriteRule Muster vor dem RewriteConds darüber abgestimmt. Diese Art von Einrichtung ist wahrscheinlich besser für die Leistung:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/domain1\.com/(.*)$ /domain1.com/index.php?q=$1 [L,QSA]
# ^ should be escaped
Beachten Sie, dass ich nicht getestet haben.