PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Apache mod_rewrite


Highlander
06.03.2005, 09:57
Hallo,

Ich habe letzte Woche ein grösseres Update unseres server amchen müssen, inklusive neuer PHP/SQL und apache Version. Letzteres läuft nun als Apache 2.0. Vorher war 1.3 aufgespielt und dort war es sehr leicht das mod_rewrite zu aktieveren um eben Grafik-Klau oder besser gesagt bei uns vor allem den Download-Diebstahl zu unterbinden.

Ich hab jetzt mehre Tage und jeweils mehrere studnen gegooglet um heraus zu finden wie ich das REWRITE nun auch wieder aktivieren kann.
Ich weiss nichtmal ob es an oder aus ist, jedenfalls funktioniert alte .htaccess Datei nicht mehr und vemreldet einen 500er interal Server Error.


Anlage: .htaccess (so sieht sie aus)
Options +SymLinksIfOwnerMatch +FollowSymLinks
AddType application/x-httpd-php .php
AddType image/x-icon .ico
AddType text/css .css
AddType text/javascript .js
AddType text/html .html
AddCharset iso-8859-1 .php .html .js .css
ErrorDocument 401 /401.html
ErrorDocument 404 /404.html
Options -indexes
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://spieleplanet.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.spieleplanet.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://spielplanet2.de/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.spielplanet2.de/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://spieleplanet.net/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.spieleplanet.net/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://81.169.180.85/.*$ [NC]
RewriteRule \.(zip|rar|exe)$ http://spieleplanet.com/news/images/sp_button.gif [R,L]

muss ich vielleicht nur die Befehlstruktur ändern? Denn in der PHPinfo.php stehen folgende module als geladen:
core prefork http_core mod_so mod_access mod_actions mod_alias mod_auth mod_auth_dbm mod_autoindex mod_cgi mod_dir mod_env mod_expires mod_include mod_log_config mod_mime mod_negotiation mod_setenvif mod_ssl mod_suexec mod_userdir sapi_apache2 mod_rewrite

hier sieht man ja ganz am ende, dass mod_rwrite an ist, aber wieso geht das dann nciht?

Hab übrigens ncoh nie apache 2.0 vorher in Aktion gesheen .. wäre echt mehr als dankbar für jede hilfestellung!

EIDT:
unter diesem Link, habe ich eine subdomain eingerichtet (under Wow Forum) mit einem testdirectory --V http://wow.spieleplanet.com/board2/files/1.gif

Wie ihr seht meldet er mit dem zuvor funktioneirenden .htaccess eine fehler .. und wie die phpinfo ja zeigt ist mod_rewrite definitv eingeschaltet.

Ich habe über confixx pübrigens beides versucht (standtart cgi scripte und normale einstellung, d.h. cgi in cgi verzichnis oder auch ausserhalb). Das PHP, nehme ich an bzw. stark an läuft doch hoffentlich als CGI modul?!?!

Reimer
06.03.2005, 10:43
http://www.modrewrite.de/foren/ftopic82.html - Laut dieser Quelle muss der Fehler irgendwo im Syntax von liegen. Am besten einmal eine ganz einfache Regel probieren und schauen, ob er dieser annimmt.

Highlander
06.03.2005, 13:17
http://www.modrewrite.de/foren/ftopic82.html - Laut dieser Quelle muss der Fehler irgendwo im Syntax von liegen. Am besten einmal eine ganz einfache Regel probieren und schauen, ob er dieser annimmt.

Dort war ich auch schon, .. von denen stammt damals meine htaccess :D

Merwürdig ist aber, dass es ja vorher lief?!?! ich hab ja mehrere evrzeichnsise geschützt, an keinen wurde was verändert .. nur jetzt gibts halt dieses Fehelrchen :/

StGaensler
06.03.2005, 14:11
Probier mal in einem Test-Verzeichnis eine .htaccess mit folgendem Inhalt zu erstellen:
Options +SymLinksIfOwnerMatch +FollowSymLinks
Wenn das nicht funktioniert, liegt es an der Server-Konfiguration, dass du keine Options überschreiben darfst.

Hast du Schreibzugriff auf die httpd.conf (bzw. default-server.conf)?
Wenn ja, dann schreibe für das entsprechende Verzeichnis (bwz. den ganzen Server) anstatt "AllowOverride None" an die Stelle "AllowOverride Options" rein, dann sollte es wieder funktionieren.

Ich habe auch einen Apache2 mit mod_rewrite laufen, und bei mir funktioniert es inzwischen. Ich habe "AllowOverride All" reingeschrieben - könnte aber ein bisschen zu viel sein :)

Highlander
06.03.2005, 14:15
Probier mal in einem Test-Verzeichnis eine .htaccess mit folgendem Inhalt zu erstellen:
Options +SymLinksIfOwnerMatch +FollowSymLinks
Wenn das nicht funktioniert, liegt es an der Server-Konfiguration, dass du keine Options überschreiben darfst.

Hast du Schreibzugriff auf die httpd.conf (bzw. default-server.conf)?
Wenn ja, dann schreibe für das entsprechende Verzeichnis (bwz. den ganzen Server) anstatt "AllowOverride None" an die Stelle "AllowOverride Options" rein, dann sollte es wieder funktionieren.

Ich habe auch einen Apache2 mit mod_rewrite laufen, und bei mir funktioniert es inzwischen. Ich habe "AllowOverride All" reingeschrieben - könnte aber ein bisschen zu viel sein :)

ahh oki doki .. durch das confixx habe ich keine datei die jetzt exakt httpd.conf heisst sonsdern "vhost_httpd.conf" - denke das müsste die dann sein oder?! ... und mit den "options" bist du dir sicher? Also das es so heisst :)

ist halt immer doof, wenn man neue software hat die man nicht wirklich kennt :) .. aber danke für alle bisherigen Tips .. das mit den options werde ich mal versuchen ..

StGaensler
06.03.2005, 14:26
Ja, mit dem AllowOverride bin ich mir sicher.

Es kann schon sein, dass die datei "vhost_httpd.conf" heist.
Bearbeite sie einfach mal, und schau, ob du dort einen Abschnitt "<Directory "/srv/www/htdocs">" findest (oder so ähnlich, wie halt der absolute Pfad zu deinem Webverzeichnis auf dem Server heißt.
In den Zeilen dort drunter sollte das AllowOverride stehen.

Highlander
06.03.2005, 14:32
Ja, mit dem AllowOverride bin ich mir sicher.

Es kann schon sein, dass die datei "vhost_httpd.conf" heist.
Bearbeite sie einfach mal, und schau, ob du dort einen Abschnitt "<Directory "/srv/www/htdocs">" findest (oder so ähnlich, wie halt der absolute Pfad zu deinem Webverzeichnis auf dem Server heißt.
In den Zeilen dort drunter sollte das AllowOverride stehen.

okai super .. ich glaueb die möglichen optionen stehen ohnehin dann in den auskommentierten Lines :) .. probiere ich gleich nach meinem Mittags-Spaziergang aus :)

StGaensler
06.03.2005, 14:58
okai super .. ich glaueb die möglichen optionen stehen ohnehin dann in den auskommentierten Lines :) .. probiere ich gleich nach meinem Mittags-Spaziergang aus :)
Normalerweise steht das schon drinnen - wen das noch das original File ist.

Ich kann dir aber auch meinen Abschnitt posten:
<Directory "/srv/www/htdocs">
# Possible values for the Options directive are "None", "All",
# or any combination of:
# Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
#
# Note that "MultiViews" must be named *explicitly* --- "Options All"
# doesn't give it to you.
#
# The Options directive is both complicated and important. Please see
# http://httpd.apache.org/docs-2.0/mod/core.html#options
# for more information.
Options -FollowSymLinks +Includes MultiViews
# 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
# Controls who can get stuff from this server.
Order allow,deny
Allow from all
</Directory>
Melde dich dann, ob es geklappt hat.

Stefan

Highlander
06.03.2005, 16:05
schaumal, denn jetzt bin ich mir unsicher geworden (wegen Confixx Dateien)

Folgende Dateien hab ich gefunden:
vi /etc/apache2/confixx_main.conf
vi /etc/apache2/confixx/confixx_main.conf
vi /etc/apache2/httpd.conf

In httpd.conf hab ich einen ähnlichen Abschnitt gefdunen, ist zwar original aber nicht so kommentiert wie deiner:

# forbid access to the entire filesystem by default
<Directory />
Options None
AllowOverride None
Order deny,allow
Deny from all
</Directory>

# use .htaccess files for overriding,
AccessFileName .htaccess
# and never show them
<Files ~ "^\.ht">
Order allow,deny
Deny from all
</Files>

ich nehme mal stark an, dass ich das overiden müsste mit ALL (mach ich dann auch, da ich das nur so kenne).

StGaensler
06.03.2005, 17:13
schaumal, denn jetzt bin ich mir unsicher geworden (wegen Confixx Dateien)

Folgende Dateien hab ich gefunden:
vi /etc/apache2/confixx_main.conf
vi /etc/apache2/confixx/confixx_main.conf
vi /etc/apache2/httpd.conf

In httpd.conf hab ich einen ähnlichen Abschnitt gefdunen, ist zwar original aber nicht so kommentiert wie deiner:

# forbid access to the entire filesystem by default
<Directory />
Options None
AllowOverride None
Order deny,allow
Deny from all
</Directory>
(...)

ich nehme mal stark an, dass ich das overiden müsste mit ALL (mach ich dann auch, da ich das nur so kenne).

Nein, genau den darfst du nicht nehmen, denn der regelt den Zugriff auf das gesammte Dateisystem (Betriebssystem und alle anderen Daten), und verbietet ihn durch "Deny from all".
Schau mal, ob du noch in einer anderen Datei (schau mal, ob es bei dir default-server.conf gibt) noch einen Directory-Abschnitt gibt, der den Pfad deiner Webpresenz behandelt, gibt.

Viele Grüße,
Stefan

Highlander
06.03.2005, 17:19
Nein, genau den darfst du nicht nehmen, denn der regelt den Zugriff auf das gesammte Dateisystem (Betriebssystem und alle anderen Daten), und verbietet ihn durch "Deny from all".
Schau mal, ob du noch in einer anderen Datei (schau mal, ob es bei dir default-server.conf gibt) noch einen Directory-Abschnitt gibt, der den Pfad deiner Webpresenz behandelt, gibt.

Viele Grüße,
Stefan

es gibt eine "confixx_vhost.conf" dort steht folgendes drin (will mir halt sicher sein)
<Directory "/srv/www/htdocs">
<Files ~ "^\.ht">
deny from all
</Files>
AllowOverride None
AllowOverride Indexes AuthConfig Limit FileInfo
Options None
Options +FollowSymLinks +Includes
</Directory>

das heisst doch ich müsste folgendes so ändern:
<Directory "/srv/www/htdocs">
<Files ~ "^\.ht">
deny from all
</Files>
AllowOverride All? oder Options?
AllowOverride Indexes AuthConfig Limit FileInfo
Options None
Options +FollowSymLinks +Includes
</Directory>

StGaensler
06.03.2005, 17:25
Kein Problem. Frag ruhig so oft nach, bis du dir sicher bist.

Dieser Ausschnitt sieht schon wesentlich besser aus, denn er behandelt nur den Pfad zur Webpräsenz (/srv/www/htdocs)

Probier einfach mal folgendes: Lass aus deiner .htaccess die Options-Zeile komplett weg. Das sollte auch funktionieren, denn "FollowSymLinks" ist schon standardmäßig gesetzt (durch obigen Eintrag in der confixx_vhost.conf)

Andernfalls:
Füge zu der zweiten Zeile "Allow Override" noch "Options" hinzu, oder füge unten zur zweiten Zeile von "Options" noch "+SymLinksIfOwnerMatch" und lasse die Options-Zeile aus deiner .htaccess ganz weg.

Habe dein Edit erst gesehen, als ich mein Post schon geschrieben hatte. Ändere in der Datei mal nichts, und probier meine Lösung in diesem Post, und wenn das nicht geht, dann steht die Änderung auch in diesem Post.
Wenn was nicht klappt, dann melde dich einfach noch mal :)

Highlander
06.03.2005, 18:18
Kein Problem. Frag ruhig so oft nach, bis du dir sicher bist.

Dieser Ausschnitt sieht schon wesentlich besser aus, denn er behandelt nur den Pfad zur Webpräsenz (/srv/www/htdocs)

Probier einfach mal folgendes: Lass aus deiner .htaccess die Options-Zeile komplett weg. Das sollte auch funktionieren, denn "FollowSymLinks" ist schon standardmäßig gesetzt (durch obigen Eintrag in der confixx_vhost.conf)

Andernfalls:
Füge zu der zweiten Zeile "Allow Override" noch "Options" hinzu, oder füge unten zur zweiten Zeile von "Options" noch "+SymLinksIfOwnerMatch" und lasse die Options-Zeile aus deiner .htaccess ganz weg.

Habe dein Edit erst gesehen, als ich mein Post schon geschrieben hatte. Ändere in der Datei mal nichts, und probier meine Lösung in diesem Post, und wenn das nicht geht, dann steht die Änderung auch in diesem Post.
Wenn was nicht klappt, dann melde dich einfach noch mal :)

also hier mal meine jetzige htaccess:
Options +SymLinksIfOwnerMatch +FollowSymLinks
AddType application/x-httpd-php .php
AddType image/x-icon .ico
AddType text/css .css
AddType text/javascript .js
AddType text/html .html
AddCharset iso-8859-1 .php .html .js .css
ErrorDocument 401 /401.html
ErrorDocument 404 /404.html
Options -indexes
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://spieleplanet.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.spieleplanet.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://spielplanet2.de/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.spielplanet2.de/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://spieleplanet.net/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.spieleplanet.net/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://81.169.180.85/.*$ [NC]
RewriteRule \.(zip|rar|exe)$ http://spieleplanet.com/news/ [R,L]

was msste genau dort raus?

und die confixx_vhost.conf ändere ich folgendermaasen:

von:
<Directory "/srv/www/htdocs">
<Files ~ "^\.ht">
deny from all
</Files>
AllowOverride None
AllowOverride Indexes AuthConfig Limit FileInfo
Options None
Options +FollowSymLinks +Includes
</Directory>

in:
<Directory "/srv/www/htdocs">
<Files ~ "^\.ht">
deny from all
</Files>
AllowOverride None
AllowOverride Indexes AuthConfig Limit FileInfo
Options None
Options + SymLinksIfOwnerMatch +FollowSymLinks +Includes
</Directory>

weil options und followsymlinks ist j gesetzt nur "SymLinksIfOwnerMatch fehlt dort quasi noch :)"

StGaensler
06.03.2005, 18:24
Die fette Zeile entfernen:
Options +SymLinksIfOwnerMatch +FollowSymLinks
AddType application/x-httpd-php .php
AddType image/x-icon .ico
AddType text/css .css
AddType text/javascript .js
AddType text/html .html
AddCharset iso-8859-1 .php .html .js .css
ErrorDocument 401 /401.html
ErrorDocument 404 /404.html
Options -indexes
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://spieleplanet.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.spieleplanet.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://spielplanet2.de/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.spielplanet2.de/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://spieleplanet.net/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.spieleplanet.net/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://81.169.180.85/.*$ [NC]
RewriteRule \.(zip|rar|exe)$ http://spieleplanet.com/news/ [R,L]


<Directory "/srv/www/htdocs">
<Files ~ "^\.ht">
deny from all
</Files>
AllowOverride None
AllowOverride Indexes AuthConfig Limit FileInfo
Options None
Options + SymLinksIfOwnerMatch +FollowSymLinks +Includes
</Directory>

Da bin ich mir nicht sicher, ob du überhaupt was ändern musst. AFAIK enthält "FollowSymLinks" auch schon "FollowSymLinks". Probier es einfach mal, nur die .htaccess zu ändern (die Zeile zu entfernen), und in der confixx_vhosts.conf nichts zu ändern.

Viele Grüße,
Stefan

Highlander
06.03.2005, 19:35
Testlink mit verbotenem Referrer:

http://spieleplanet.com/test/signatur.rar

Highlander
06.03.2005, 19:56
<Directory "/srv/www/htdocs">
<Files ~ "^\.ht">
deny from all
</Files>
AllowOverride None --> muss das nicht weg, die zeile darunter ist dann ja doppelt?
AllowOverride Indexes AuthConfig Limit FileInfo
Options None -> hier genauso, das verbietet doch mit none alles und darunter erlaubt es das .. ich glaube hier will die config, dass ich auskommentiere?
Options + SymLinksIfOwnerMatch +FollowSymLinks +Includes
</Directory>

in meinen recherchen zeigte sich niemals dass die zeilen zweimal nacheinander standen .. entweder hatten sie none oder sie hatten die module/optionen die sie erlauben aufgeführt, aber beides ist doch immer gleich "0" und damit nein ?!?!

StGaensler
06.03.2005, 20:13
Das hat mich auch gewundert. Nachdem es noch nicht funktioniert, nimm diese Zeilen mal raus. Und bei "+ SymLinksIfOwnerMatch" müsstest du das + ganz an den Text hin machen.

Highlander
07.03.2005, 20:56
jetzt geht es :D .. vielen vielen dank .. ich musste trotz anpassung an der confixx_vhost.conf die ERSTE Zeile kompeltt rausnehmen und siehe da es geht :)

test:
http://spieleplanet.com/downloads/mods/privateer1.0.exe

StGaensler
07.03.2005, 21:13
Bitteschön. Freut mich :)