Probleme mit .htaccess und mod_rewrite

Alles, was den Apache betrifft, kann hier besprochen werden.

Probleme mit .htaccess und mod_rewrite

Postby zweihorn » 30. October 2016 13:16

Hallo zusammen,

ich betreue die Homepage eines Kinder- und Jugendzirkus.
Zum rumprobieren wollte ich nun eine Kopie der Seite auf meinem vServer laufen lassen, damit ich an der echten Seite nichts kaputt mache.
Die Seite benutzt die RewriteEngine, um "Clean URLs" benutzen zu können:

Aus
https://xxx.de/template.php/Start/Willkommen
wird
https://xxx.de/Start/Willkommen

Die Verarbeitung der Argumente ("Start" und "Willkommen") passiert in der template.php

Nun habe ich das Problem, dass eben genau dieses URL-Umschreiben auf meinem vServer nicht funktioniert.
Die Seite ist erreichbar, wenn ich sie über
https://playground.xxx.de/template.php/Start/Willkommen
aufrufe, aber nicht über
https://playground.xxx.de/Start/Willkommen
- da bekomme ich die Fehlermeldung
No input file specified.


Die vHost-Konfiguration sieht folgendermaßen aus:

Code: Select all
<VirtualHost *:80>
  ServerName playground.xxx.de
  ServerAdmin webmaster@xxx.de

  RewriteEngine On
  RewriteCond %{HTTPS} off
  RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
</VirtualHost>

<VirtualHost *:443>
  ServerName playground.xxx.de
  ServerAdmin webmaster@xxx.de
  Header always set Strict-Transport-Security "max-age=31536000"

  DocumentRoot /var/www/xxx.de/htdocs/playground
  SuexecUserGroup zirkus zirkus

  <Directory /var/www/xxx.de/htdocs/playground/>
    FCGIWrapper /var/www/xxx.de/conf_xxx.de .php
    <FilesMatch \.php$>
      SetHandler fcgid-script
    </FilesMatch>
    AllowOverride All
    Options +ExecCGI
  </Directory>

  LogLevel warn
  ErrorLog /var/www/xxx.de/logs/error_playground.log
  CustomLog /var/www/xxx.de/logs/access_playground.log combined

  SSLEngine On
  SSLProtocol All -SSLv2 -SSLv3
  SSLCertificateKeyFile /home/zirkus/letsencrypt/live/cloud.xxx.de/privkey.pem
  SSLCertificateFile /home/zirkus/letsencrypt/live/cloud.xxx.de/fullchain.pem
</VirtualHost>


In der .htaccess unter /var/www/xxx.de/htdocs/playground/ steht folgendes:

Code: Select all
######################################################################
ErrorDocument 404 https://playground.xxx.de/404.php
ErrorDocument 403 https://playground.xxx.de/404.php

######################################################################
#Mit options kann man vrschiedene Funktionen vom Server Steuern
# -/+ Indexes: gibt eine Liste zurück, wenn keine index.php/html/... gefunden wurde.
# - off
# + on
Options -Indexes

######################################################################
# AddHandler allows you to map certain file extensions to "handlers",
#AddHandler af_php5 .php

######################################################################
# Clean URL's
# !-f: check ob die Datei nicht vielleicht existiert
# !-d: prüfen ob angegebene url vllt echtes verzeichnis ist
# Rewrite Rule: soll alles ^(.*)$ was oben in Adressleiste nach der Domain reinkommt fiktiv hinter das xxx.php schreiben
# z.B. /ornder1/ordner2/index.php -> index.php/ordner1/ordner2
# quelle:http://webstylez.net/Virtuelle-Adressen-umgeschriebene-Links-oder-rewritten-URLs-mit-PHP/
# PHP: $UnterordnerOhnePagename = str_replace($_SERVER['SCRIPT_NAME'], '', $_SERVER['PHP_SELF']);
#          $levels = explode('/', $UnterordnerOhnePagename);
Options +FollowSymLinks

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
#RewriteRule ^(.*)/$ template.php/$1 [L]
RewriteRule ^(.*)$ template.php/$1 [PT,L,QSA]



Wenn ich via curl den Header des Seitenaufrufs
https://playground.xxx.de/Start/Willkommen

anschaue, bekomme ich als HTTP-Code "404 - Not Found".


Vermutlich ist es nur irgendeine Kleinigkeit, die ich einfach übersehen habe..


Liebe Grüße

zweihorn
zweihorn
 
Posts: 6
Joined: 30. October 2016 13:04
Operating System: Debian

Re: Probleme mit .htaccess und mod_rewrite

Postby Nobbie » 30. October 2016 22:37

zweihorn wrote:Die Seite ist erreichbar, wenn ich sie über https://playground.xxx.de/template.php/Start/Willkommen aufrufe


Da kriege ich schon die Fehlermeldung "Diese Website ist nicht erreichbar".
Nobbie
 
Posts: 9820
Joined: 09. March 2008 13:04

Re: Probleme mit .htaccess und mod_rewrite

Postby zweihorn » 30. October 2016 22:56

Nobbie wrote:Da kriege ich schon die Fehlermeldung "Diese Website ist nicht erreichbar".


Die richtige URL habe ich auch durch "xxx.de" ersetzt, da auf der Seite selbst nichts relevantes zu sehen ist. Die (meiner Meinung nach) wichtigsten Informationen habe ich im Beitrag oben genannt.
Solltest du die URL dennoch brauchen, kann ich sie dir gerne per PM schicken.


LG, zweihorn
zweihorn
 
Posts: 6
Joined: 30. October 2016 13:04
Operating System: Debian

Re: Probleme mit .htaccess und mod_rewrite

Postby Nobbie » 31. October 2016 12:18

Aber sonst ist die URL nicht "geheim"?? Also die, die Dir helfen sollen, bekommen eine maskierte URL zu sehen, die nicht funktioniert. Und die, die nur so darauf klicken sollen, bekommen die richtige URL?

So oder so muss man in den Quellcode schauen (insbesondere die Fehlerausgabe "No input file specified" ist ja relevant, die kommt wahrscheinlich aus template.php), gib da mal mittels phpinfo() alles aus, was da aktuell bekannt ist, resp. muss man insbesondere auch die Struktur der Verzeichnisse und Dateien kennen, ein 404er Fehler bedeutet ein Verweis auf ein nicht vorhandenes Dokument. Also kein Problem mit irgendwechen Rechten (weder auf Apache Ebene noch auf OS Ebene), sondern ein HTTP Request auf ein nicht existierendes Dokument. Das müßte im error_log genauer spezifiziert sein (ggf. im Abgleich mit dem access_log), welcher Request das ist. Daraus musst Du dann erkennen, was den Request auslöst. Mehr kann man von hier aus nicht dazu sagen.
Nobbie
 
Posts: 9820
Joined: 09. March 2008 13:04

Re: Probleme mit .htaccess und mod_rewrite

Postby zweihorn » 31. October 2016 12:32

Nobbie wrote:Aber sonst ist die URL nicht "geheim"?? Also die, die Dir helfen sollen, bekommen eine maskierte URL zu sehen, die nicht funktioniert. Und die, die nur so darauf klicken sollen, bekommen die richtige URL?

Die Arbeitskopie der Seite läuft auf meinem privaten Server, da hat prinzipiell niemand etwas zu suchen.
Die "richtige" Seite ist unter https://www.kinder-circus-knallbonbon.de erreichbar.

Nobbie wrote:So oder so muss man in den Quellcode schauen resp. muss man insbesondere auch die Struktur der Verzeichnisse und Dateien kennen, ein 404er Fehler bedeutet ein Verweis auf ein nicht vorhandenes Dokument.


Die ganzen Inhalte der Webseite sind in einer Datenbank gespeichert. Der Abruf sowie die Ausgabe erfolgen über die template.php

Also folgendermaßen:
Ich gehe auf https://www.kinder-circus-knallbonbon.de/Start/Willkommen. Mittels mod_rewrite wird die URL (intern) zu https://www.kinder-circus-knallbonbon.de/template.php/Start/Willkommen umgeschrieben. Die template.php sucht mittels SQL-Abfrage nach einem Datensatz unterhalb der Ebene "Start" mit dem Titel "Willkommen" und gibt den Inhalt zurück.
Meines Erachtens funktioniert genau dieses Umschreiben der URL nicht, da der 404 Error kommt.

Nobbie wrote:Also kein Problem mit irgendwechen Rechten (weder auf Apache Ebene noch auf OS Ebene), sondern ein HTTP Request auf ein nicht existierendes Dokument.

Richtig, ein solches Dokument existiert nicht. Es sollte als Argument an die template.php übergeben werden, die dann wiederum in der Datenbank nach der richtigen Seite sucht und diese ausgibt. Um die URLs zu verschönern wird mittels mod_rewrite "template.php" in der URL "ausgeschnitten", sodass https://www.kinder-circus-knallbonbon.de/Start/Willkommen übrig bleibt.

Nobbie wrote:Das müßte im error_log genauer spezifiziert sein (ggf. im Abgleich mit dem access_log), welcher Request das ist.

Im error_log steht nichts, im access_log steht folgendes:

Code: Select all
x.x.x.x - - [31/Oct/2016:12:32:51 +0100] "GET /Start/Willkommen/ HTTP/1.1" 404 4077 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/602.2.14 (KHTML, like Gecko) Version/10.0.1 Safari/602.2.14"
zweihorn
 
Posts: 6
Joined: 30. October 2016 13:04
Operating System: Debian

Re: Probleme mit .htaccess und mod_rewrite

Postby Nobbie » 31. October 2016 12:43

zweihorn wrote:Die Arbeitskopie der Seite läuft auf meinem privaten Server, da hat prinzipiell niemand etwas zu suchen.


Dann eben nicht. Du suchst doch hier Hilfe und Du hast doch das Problem, dass es auf diesem Server nicht läuft. Mir ist das total egal.

zweihorn wrote:Die ganzen Inhalte der Webseite sind in einer Datenbank gespeichert. Der Abruf sowie die Ausgabe erfolgen über die template.php


Es ändert nichts, Du musst in template.php (oder wo auch immer) die Stelle finden, wo die Fehlermeldung ausgegeben wird. Und an dieser Stelle musst Du die Ursache für die Meldung finden. Da führt kein Weg dran vorbei.

Es ist auch durchaus möglich, dass der falsche Servername (den Du hier nicht veröffentlichst) die Fehlerursache ist, vielleicht wird irgendwo die URL gescanned oder auf Basis der URL eine Weiterleitung veranlasst und auf Grund von bestimmten Angaben mit "kinder-circus-knallbonbon" abgeglichen, was aber auf Deinem Server in die Hose geht. Das ist auch nur eine Idee. S.o. - Du musst die Stelle finden, wo der Fehler ausgegeben wird und dort musst Du die Ursache finden. Wenn ich diese Anforderung hätte, würde ich mir zu Hause einen Server einrichten, dort die Umgebung identisch einrichten (inkl. gleicher Domain, also www.kinder-circus-knallbonbon.de, das würde ich in der Hosts Datei verdrahten), die gleichen Pfade einrichten und dann man mal schauen, was passiert. Die unterschiedlichen Servernamen ist ja die Stelle, wo wir genau wissen, dass die nicht gleich sind und das führt bei vielen Versuchen, einen Spiegelserver einzurichten zu vergleichbaren Problemen. Das ist ein Standardproblem auch bei Umzug von WordPress Installationen.
Nobbie
 
Posts: 9820
Joined: 09. March 2008 13:04

Re: Probleme mit .htaccess und mod_rewrite

Postby zweihorn » 31. October 2016 12:48

Nobbie wrote:Es ändert nichts, Du musst in template.php (oder wo auch immer) die Stelle finden, wo die Fehlermeldung ausgegeben wird. Und an dieser Stelle musst Du die Ursache für die Meldung finden. Da führt kein Weg dran vorbei.


An der template.php liegt es nicht. Wenn ich als URL https://playground.kinder-circus-knallbonbon.de/template.php/Start/Willkommen angebe, funktioniert alles.
Sobald ich aber das template.php weglasse, kommt besagte Fehlermeldung "No input file specified" bzw. im Header kommt als HTTP-Code 404 zurück. Also meines Erachtens funktioniert das Umschreiben der URL nicht richtig. Den Inhalt der .htaccess habe ich im ersten Beitrag bereits angegeben.
zweihorn
 
Posts: 6
Joined: 30. October 2016 13:04
Operating System: Debian

Re: Probleme mit .htaccess und mod_rewrite

Postby Nobbie » 31. October 2016 12:57

Kann es sein, dass dieser URL Rewrite nicht auf dem Originalserver implementiert ist (also nicht auf kinder-circus-knallbonbon.de), sondern dass Du das erst hier auf Deinem Privatserver einbaust?? Meiner Meinung nach ist das die Fehlerursache, der Rewrite sieht total wild aus (kann meiner Meinung nach nicht funktionieren). Wo kommt das her und läuft das so auch auf kinder-circus-knallbonbon.de?
Nobbie
 
Posts: 9820
Joined: 09. March 2008 13:04

Re: Probleme mit .htaccess und mod_rewrite

Postby zweihorn » 31. October 2016 14:26

Nobbie wrote:Kann es sein, dass dieser URL Rewrite nicht auf dem Originalserver implementiert ist (also nicht auf kinder-circus-knallbonbon.de), sondern dass Du das erst hier auf Deinem Privatserver einbaust?? Meiner Meinung nach ist das die Fehlerursache, der Rewrite sieht total wild aus (kann meiner Meinung nach nicht funktionieren). Wo kommt das her und läuft das so auch auf kinder-circus-knallbonbon.de?


Die .htaccess habe ich 1:1 von der Originalseite übernommen, dort funktioniert alles.
Die RewriteRule ist von dieser Seite hier übernommen: http://webstylez.net/Virtuelle-Adressen-umgeschriebene-Links-oder-rewritten-URLs-mit-PHP/
Also daran liegt es meines Erachtens nicht - auf dem Originalserver funktioniert es ja.
Allerdings glaube ich, dass die Regel gar nicht erst angewandt wird.
zweihorn
 
Posts: 6
Joined: 30. October 2016 13:04
Operating System: Debian

Re: Probleme mit .htaccess und mod_rewrite

Postby Nobbie » 31. October 2016 15:24

Ist die vhost Konfiguration und FCGI Wrapper auch vom Originalserver? Die Fehlermeldung bedeutet nämlich, dass der PHP Interpreter einen ungültigen Namen für das PHP Script übergeben bekommt. Das ist so vermurkst kontruiert, durch die RewriteRule wird ja eine URI mit Dateinamen innerhalb eines Pfadnamens erzeugt (template.php/Start/Willkommen), ich vermute, dass durch die Mischung dieser Rewrite und die Aktivierung von FCGI (und da sind auch noch Rewrites drin) insgesamt PHP einen ungültigen Dateinamen abkriegt.

Ich glaube nicht, dass das nur eine Kleinigkeit ist, das ganze Konzept ist ziemlich fragwürdig. Warum man die Parameter "Start" usw. nicht als CGI Parameter weiterreicht sondern als Pfadnamen, das ist unverständlich. Gerade wenn man Rewrites benutzt, kann man die Pfadnamen extrahieren und als Parameter übergeben.
Nobbie
 
Posts: 9820
Joined: 09. March 2008 13:04

Re: Probleme mit .htaccess und mod_rewrite

Postby zweihorn » 31. October 2016 16:08

Nobbie wrote:Ist die vhost Konfiguration und FCGI Wrapper auch vom Originalserver?

Wie die Konfiguration auf dem Originalserver aussieht weiß ich nicht, das läuft über einen separaten Hoster.

Nobbie wrote:Die Fehlermeldung bedeutet nämlich, dass der PHP Interpreter einen ungültigen Namen für das PHP Script übergeben bekommt. Das ist so vermurkst kontruiert, durch die RewriteRule wird ja eine URI mit Dateinamen innerhalb eines Pfadnamens erzeugt (template.php/Start/Willkommen), ich vermute, dass durch die Mischung dieser Rewrite und die Aktivierung von FCGI (und da sind auch noch Rewrites drin) insgesamt PHP einen ungültigen Dateinamen abkriegt.
Ich glaube nicht, dass das nur eine Kleinigkeit ist, das ganze Konzept ist ziemlich fragwürdig. Warum man die Parameter "Start" usw. nicht als CGI Parameter weiterreicht sondern als Pfadnamen, das ist unverständlich. Gerade wenn man Rewrites benutzt, kann man die Pfadnamen extrahieren und als Parameter übergeben.

Das mit der RewriteRule habe nicht ich mir überlegt, die Seite hat ein ehemaliges Mitglied des Zirkus erstellt. Das ganze ist ein selbst-programmiertes CMS, wie genau alles funktioniert habe ich selbst noch nicht zu 100% durchschaut.

Dazu muss ich aber noch sagen, dass ich damals bei Uberspace alles zum Laufen gekriegt habe. Die benutzen meines Wissens auch FCGI mit ähnlicher vHost-Konfiguration.
Ich habe gerade mal in Uberspace's Wiki nachgeschaut, dort ist eine Beispiel-vHost-Konfiguration:

Code: Select all
<Directory /var/www/virtual/beispieluser>
AllowOverride AuthConfig FileInfo Indexes Limit Options=ExecCGI,Includes,Indexes,MultiViews,SymLinksIfOwnerMatch
Options +Includes
</Directory>

<VirtualHost 95.143.172.95:81>
ServerName beispieluser.andromeda.uberspace.de
ServerAlias *.beispieluser.andromeda.uberspace.de
ServerAdmin support@uberspace.de
SuexecUserGroup beispieluser beispieluser
DocumentRoot /var/www/virtual/beispieluser/html
ScriptAlias /cgi-bin /var/www/virtual/beispieluser/cgi-bin
ScriptAlias /fcgi-bin /var/www/virtual/beispieluser/fcgi-bin
Include /etc/httpd/conf/dyncontent.conf

RewriteEngine On

# PHP expects a "HTTP_AUTHORIZATION" header to correctly provide PHP_AUTH_USER and PHP_AUTH_PW
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

# If there is a host-specific pseudo-DocumentRoot, use it instead of the default one
RewriteCond %{REQUEST_URI} !^/f?cgi-bin/
RewriteCond /var/www/virtual/beispieluser/%{HTTP_HOST} -d
RewriteRule (.*) /var/www/virtual/beispieluser/%{HTTP_HOST}/$1

</VirtualHost>


Damals habe ich ewig gebraucht, bis ich das ganze zum Laufen gebracht habe. Ich glaube es hat noch ein
Code: Select all
RewriteBase /

oder so gefehlt.
zweihorn
 
Posts: 6
Joined: 30. October 2016 13:04
Operating System: Debian

Re: Probleme mit .htaccess und mod_rewrite

Postby Nobbie » 31. October 2016 16:26

Musst Du denn überhaupt FCGI benutzen?? Wozu dieses ganze Gedöns in den vhosts?? Sonst nimm wenigstens diesen Teil komplett raus, besser wäre es natürlich, das ganze Konzept anzupassen, aber wenn Du da nicht durchblickst, geht es halt nicht. Tatsache ist, dass dieser Rewrite aus der .htaccess, wo an die template.php der ganze Rattenschwanz als Ordner nochmal drangehängt wird, einfach nur grausam ist. Ist auch vollkommen unnötig, einfach nur auf template.php einen RewriteRule veranlassen, das reicht vollkommen (das machen fast alle bekannten CMS so), die Namen der Ordner (Start/Willkommen), überhaupt die ganze "Original" URL (so wie der Anwender sie angefordert hat), das steht alles auch so immer noch zur Verfügung in den verschiedenen Server Variablen. Da muss man nicht den ganzen Mist nochmal hinten dranklatschen, genau da wird irgendwo ein Problem entstehen, wie gesagt (das habe ich ergoogelt vorhin), diese Fehlermeldung kommt vom PHP Interpreter und bedeutet, dass er nicht weiß, was er interpretieren soll. Durch die ganze Rewriterei und Weiterleiterei und die Mischung mit den Ordnern ist wahrscheinlich für den PHP Interpreter kein gültiger Dateiname mehr entstanden, bei FCGI (bzw. auch bei CGI) wird der Interpreter als externes Programm aufgerufen und auf der Kommandozeile der Dateiname des Scripts. Und das geht irgendwo in die Hose.

Aber wenn Du den ganzen FCGI Teil wegnimmst (hat der irgendeine Notwendigkeit??), dann könnte es wieder funktionieren, weil dann PHP im sog. "Moduled Mode" angesprochen wird, da ist Interpreter direkt mit Apache geladen worden und ist quasi Teil von Apache, die PHP Scripts werden direkt eingelesen und interpretiert.
Nobbie
 
Posts: 9820
Joined: 09. March 2008 13:04


Return to Apache

Who is online

Users browsing this forum: No registered users and 3 guests