RedirectMatch mit Ausnahme
Stefan Einspender
- webserver
Hallo ForumsleserInnen,
wie kann ich erreichen, dass für die robots.txt nicht der Statuscode
410 sondern 200 (und eben diese Datei) an den Client verschickt wird?
Jetzt:
RedirectMatch gone ^.*$
Dann:
?
Bestimmt nicht so schwierig, aber ich komme partout nicht drauf und
danke an dieser Stelle schonmal im voraus.
Viele Grüße,
Stefan
wie kann ich erreichen, dass für die robots.txt nicht der Statuscode
410 sondern 200 (und eben diese Datei) an den Client verschickt wird?
RedirectMatch gone /$|.*.html
diese Zeile habe ich jetzt erstmal genommen, allerdings erfüllt sie
nicht ganz die Aufgabe, reicht aber aus, bis mir jemand eine bessere
Lösung vorschlägt :-)
Viele Grüße,
Stefan
RedirectMatch gone /$|.*.html
ein netter Chatteilnehmer hat mir eine andere Variante verraten, die
die von mir gestellte Aufgabe perfekt erfüllt, könnte man eigentlich
nur noch kürzen, falls möglich:
RewriteEngine on
RewriteCond %{REQUEST_URI} !/robots.txt$
RewriteRule .* $1 [G,L]
Viele Grüße,
Stefan
Hallo Forum,
naja, nachdem Stefan jetzt seine Antwort bekommen hat, hätte ich da jetzt auch mal eine Frage zu mod_rewrite:
Unter der URL http://localhost/~christian/sonstwas/ (lokal bei mir) habe ich eine Datei index.php abgelegt. Ich möchte nun, dass diese _alle_ Anfragen unterhalb dieses Verzeichnisses entgegennimmt. Von daher habe ich zuerst so etwas probiert:
RewriteEngine On
RewriteBase /~christian/sonstwas
RewriteRule ^(.*)$ index.php?url=$1
Das hat jedoch den Nachteil, dass er durch 'Verkettung' auf index.php?url=index.php weiterleitet. (dann hört er auf, da er nicht auf das gleiche Ergebnis weiterleiten will) Ein [L] half nicht. Also hab' ich ein bisschen getrickst und folgendes gemacht:
RewriteEngine On
RewriteBase /~christian/sonstwas
RewriteRule ^index.php(.*) index.php$1 [S=1]
RewriteRule ^(.*)$ index.php?url=$1 [L]
Das klappt auch. Aber irgendwie finde ich es unschön. Aber jetzt kommt mein eigentliches Problem: Ich will, dass Zugriffe auf /images und /styles, wo *ausschließlich* statische Dateien liegen, es also hirnlos ist, das ganze durch PHP zu jagen.
Ich habe also nun
RewriteEngine On
RewriteBase /~christian/sonstwas
RewriteRule ^index.php(.*) index.php$1 [S=2]
RewriteRule ^(styles|images)(.*) $1$2 [S=1]
RewriteRule ^(.*)$ index.php?url=$1 [L]
versucht. Alles andere klappte auch, doch jedes Mal, wenn ich auf /styles oder /images zugreifen wollte, ging er in eine Endlosschleife. Auch ein
RewriteEngine On
RewriteBase /~christian/sonstwas
RewriteRule ^(index.php|styles|images))(.*) $1$2 [S=2]
RewriteRule ^(.*)$ index.php?url=$1 [L]
brachte nichts, im Gegenteil, jetzt hat er sich jedes Mal aufgehangen.
Wo ist meine Denkblokade?
Grüße,
Christian
Hallo Christian!
Wo ist meine Denkblokade?
Vielleicht solltest Du mal über eine Rewrite_Cond nachdenken, also nur bei einer bestimmten Bedingung umschreiben?
Ich kenne mich damit selbst nicht gut aus, daher lieber die Links auf
http://httpd.apache.org/docs/mod/mod_rewrite.html#RewriteCond und
http://httpd.apache.org/docs/misc/rewriteguide.html
Ich stelle mir das in etwa so vor:
RewriteCond %{REQUEST_URI} ^/images/.* [OR]
RewriteCond %{REQUEST_URI} ^/styles/.* [OR]
RewriteCond %{REQUEST_URI} ^/index.php.*
RewriteRule ^(.*)$ script.php?url=$1 [L]
So ist das nur leider genau falsch rum ;-) Man müßte die Bedingung negieren, also wenn _nicht_ /images/... aber wie das geht weiß ich nicht. Aber vielleicht hilft es Dir.
Ich weiß nicht in wie weit RegEx hier unterstützt werden, ob man ^ auch zur Negation verwenden kann, vielleicht geht es ja.
Ganz einfach wäre das ganze, wenn man alle die Dateien die das betrifft in ein separates Verzeichnis legt, sowas wie /scripts/, oder - aha - ich will das sowieso mehrsprachig machen, dann mach das vielleicht einfach so:
RewriteCond %{REQUEST_URI} ^/(en|de|es|fr)/.*
RewriteRule ^/(.*?)/(.*)$ script.php?url=$2&lang=$1 [L]
Hätte ich direkt 2 Fliegen mit einer Klappe geschlagen!
Grüße
Andreas
Hallo Andreas,
Vielleicht solltest Du mal über eine Rewrite_Cond nachdenken, also nur bei einer bestimmten Bedingung umschreiben?
Jepp, das ist eine sehr gute Idee. (ich dachte RewriteCond bräuchte man nur für so was wie UserAgent - denkste ;))
Ich stelle mir das in etwa so vor:
RewriteCond %{REQUEST_URI} ^/images/.* [OR]
RewriteCond %{REQUEST_URI} ^/styles/.* [OR]
RewriteCond %{REQUEST_URI} ^/index.php.*
RewriteRule ^(.*)$ script.php?url=$1 [L]So ist das nur leider genau falsch rum ;-) Man müßte die Bedingung negieren, also wenn _nicht_ /images/... aber wie das geht weiß ich nicht. Aber vielleicht hilft es Dir.
Das hilft mir jetzt sehr, laut Anleitung müsste
RewriteCond %{REQUEST_URI} !^/images/.*
RewriteCond %{REQUEST_URI} !^/styles/.*
RewriteCond %{REQUEST_URI} !^/index.php.*
RewriteRule ^(.*)$ script.php?url=$1 [L]
funktionieren. Kann es im Moment leider nicht testen, ich wollte eine Erweiterung meines Mozilla deinstallieren (als root) und diese Routine hat mir freundlicherweise das *komplette* /bin-Verzeichnis weggefegt - jetzt muss ich das manuell rekonstruieren... *ichinstallierenurnochdaswasichbrauche*
Ich weiß nicht in wie weit RegEx hier unterstützt werden, ob man ^ auch zur Negation verwenden kann, vielleicht geht es ja.
Nicht ^ sondern !, in der Anleitung zu RewriteCond stehts drin.
RewriteCond %{REQUEST_URI} ^/(en|de|es|fr)/.*
RewriteRule ^/(.*?)/(.*)$ script.php?url=$2&lang=$1 [L]Hätte ich direkt 2 Fliegen mit einer Klappe geschlagen!
Genau, nur das ich das Problem habe, das bei dem Projekt, wo ich gerade daran arbeite, Mehrsprachigkeit _nicht_ gefordert ist. (sonst habe ich es auch immer so gemacht, bzw. die RewriteCond-Zeile ausgelassen und in RewriteRule halt statts (.*?) (de|en) verwendet)
Noch ein Tipp:
RewriteRule ^/([^/]*)/(.*)$ script.php?url=$2&lang=$1 [L]
geht schneller. :)
Grüße,
Christian
Hallo Christian!
Das hilft mir jetzt sehr, laut Anleitung müsste
RewriteCond %{REQUEST_URI} !^/images/.*
RewriteCond %{REQUEST_URI} !^/styles/.*
RewriteCond %{REQUEST_URI} !^/index.php.*
RewriteRule ^(.*)$ script.php?url=$1 [L]funktionieren. Kann es im Moment leider nicht testen, ich wollte eine Erweiterung meines Mozilla deinstallieren (als root) und diese Routine hat mir freundlicherweise das *komplette* /bin-Verzeichnis weggefegt - jetzt muss ich das manuell rekonstruieren... *ichinstallierenurnochdaswasichbrauche*
Aber Mozilla verlangt ja für jede Kleinigkeit root glaube ich mich zu erinnern, oder?
Ach ja, noch eine kleine Verbesserung:
* 'ornext|OR' (or next condition)
Use this to combine rule conditions with a local OR instead of the implicit AND. Typical example:
RewriteCond %{REMOTE_HOST} ^host1.* [OR]
RewriteCond %{REMOTE_HOST} ^host2.* [OR]
RewriteCond %{REMOTE_HOST} ^host3.*
RewriteRule ...some special stuff for any of these hosts...
Without this flag you would have to write the cond/rule three times.
Nicht ^ sondern !, in der Anleitung zu RewriteCond stehts drin.
ARGH! Das hatte mir schonmal jemand gesagt, und ich habe es auch _schon_wieder_ überlesen...
Grüße
Andreas
Hallo Andreas,
Aber Mozilla verlangt ja für jede Kleinigkeit root glaube ich mich zu erinnern, oder?
Wenn man so blöd ist wie ich und ihn als root installiert - ja. Ich werde ihn, sobald mein System wieder läuft (schreibe momentan unter Windows), von der Platte fegen und dann als eigener Benutzer 'mozilla' installieren - dann kann ich als dieser Benutzer die Erweiterungen draufmachen, ohne dass ich als root arbeiten muss.
* 'ornext|OR' (or next condition)
Use this to combine rule conditions with a local OR instead of the implicit AND.
Ähm, kurze Wiederholung zum Thema Logik:
bedingung1 ODER bedingung2 ODER bedingung3
Wenn ich _alles_ negieren will, dann habe ich folgenden Ausdruck:
NICHT ( bedingung1 ODER bedingung2 ODER bedingung3 )
und wenn ich das nun auflöse, so dass keine Klammer mehr da steht:
NICHT(bedingung1) UND NICHT(bedingung2) UND NICHT(bedingung3)
ARGH! Das hatte mir schonmal jemand gesagt, und ich habe es auch _schon_wieder_ überlesen...
Mach' Dir nichts draus, ich bin ja auch nicht auf RewriteCond gekommen...
Grüße,
Christian
Hallo!
Ähm, kurze Wiederholung zum Thema Logik:
[...]
Ähm....*schäm*...auweia....
Damit wäre das also geklärt.
Nochmal zum Mozilla, man erstellt also einen Benutzer Mozilla mit eigenem user/pass, dann muß man sich entweder in der shell als Mozilla einloggen, oder bei Gnome etc., und dann enstprechend installieren, oder?
Wie ist das eigentlich mit den Benutzerdaten bei einem Update? Wie aktualisiere ich mozilla unter Linux am besten, so dass ich diese Daten, Plugins... alle behalten kann? Das Java-Plugin war nämlich umständlich zu installieren, aber das geht inzwischen bei 1.2.1 glaub ich auch einfacher...
Naja, jedenfalls ist die Version 1.2.1 ein guter Grund für ein Update.
Grüße und vielen Dank nochmal für Deine Erklärungen!
Andreas
Hallo Andreas,
Nochmal zum Mozilla, man erstellt also einen Benutzer Mozilla mit eigenem user/pass, dann muß man sich entweder in der shell als Mozilla einloggen, oder bei Gnome etc., und dann enstprechend installieren, oder?
Jain. Das X-Window-Sicherheitskonzept steht da noch im Wege, das erlaubt standardmäßig nur Zugriffe vom gleichen Benutzer. Ich glaube, Du kannst das Scheunentor mit 'xset +' aufreißen, bin mir aber nicht ganz sicher, schon ewig her, dass ich das gemacht habe. (ich verwende immer 'kdesu -u user programmname', das macht das ganze für mich, und öffnet nur gezielt ein Loch)
Wie ist das eigentlich mit den Benutzerdaten bei einem Update?
Benutzerdaten werden in ~/.mozilla gehalten. Plugins können an zwei versch. Stellen liegen, einmal unter /pfad/zu/mozilla/plugins und zum zweiten unter ~/.mozilla/plugins. Letzteres ist empfehlenswert, da die Plugins beim Update erhalten bleiben. (und jeder User andere Plugins haben kann)
Wie aktualisiere ich mozilla unter Linux am besten, so dass ich diese Daten, Plugins... alle behalten kann?
Alle Plugins von /pfad/zu/mozilla/plugins nach ~/.mozilla/plugins verschieben, /pfad/zu/mozilla löschen, Mozilla per Installer noch mal an den gleichen Ort (oder anderswo - ist egal) installieren, und dann dürfte alles klappen. So hat's bei mir immer funktioniert, also ohne Gewähr. (notfalls ein Backup von ~/.mozilla machen, woanders speichert Mozilla keine Profildaten) Ach ja, die Erweiterungen musst Du alle manuell nachinstallieren.
Grüße,
Christian
Hallo Andreas nochmal,
also, gerade getestet:
RewriteCond %{REQUEST_URI} !^/images/.*
RewriteCond %{REQUEST_URI} !^/styles/.*
RewriteCond %{REQUEST_URI} !^/index.php.*
RewriteRule ^(.*)$ script.php?url=$1 [L]
Funktioniert prima, vielen Dank! Fürs Archiv wäre nur noch anzumerken, dass die letzte Zeile natürlich auf index.php und nicht auf script.php weiterleiten sollte, und dass immer das absolute Pfad zum Webserverstammbaum angegeben werden muss, also bei mir /~christian/sonstwas/images/ anstelle von /images, etc.
Grüße,
Christian
RewriteEngine On
RewriteBase /~christian/sonstwas
RewriteRule ^(index.php|styles|images))(.*) $1$2 [S=2]
^
|
Vielleicht deswegen? --------+
RewriteRule ^(.*)$ index.php?url=$1 [L]
Grüße
Andreas
Hallo Andreas,
RewriteEngine On
RewriteBase /~christian/sonstwas
RewriteRule ^(index.php|styles|images))(.*) $1$2 [S=2]
^
|
Vielleicht deswegen? --------+
Du meinst die Klammer? (im User-Style-Sheet ist das alles verschoben, von daher bitte keine Markierungen mit ^ bei Zitaten, ok?) Neee, das war jetzt nur ein Typo beim Posten. :-)
Grüße,
Christian