← Back to team overview

sslug-teknik team mailing list archive

Hard-core problemer med Apache: mod_rewrite, FastCGI, DirectoryIndex

 

Hejsa!

Jeg har netop ændret min Apache-konfiguration, så PHP nu kører via FastCGI
(tidligere kørte PHP bare som alm. CGI). Jeg har hele tiden kørt med
mod_rewrite på serveren, hvilket har fungeret fint indtil jeg installerede
FastCGI...

Jeg er således løbet ind i et problem med kombinationen af mod_rewrite,
FastCGI, og DirectoryIndex-direktiverne i httpd.conf:

Jeg har følgende Virtual Host opsat: 

-----------------------------------
<VirtualHost 10.0.0.1>
  User foo-user
  Group foo-user
  ServerName servername.dk
  ServerPath /www/servername.dk/html/
  DocumentRoot /www/servername.dk/html/

  RewriteEngine on
  RewriteRule ^/test1/ - [L]
  RewriteRule ^/_((images|style|script)/.*)$ /$1 [L]
  RewriteRule ^/_(images|style|script)$ /$1 [L]
  RewriteRule ^(.*)$ /index.php?my_url=$1&%{QUERY_STRING}

  ErrorLog /www/servername.dk/logs/error_log
  CustomLog /www/servername.dk/logs/access_log combined
  FastCgiServer /www/servername.dk/html/php-fastcgi-wrapper
  AddHandler php-fastcgi .php
  <Location /php-fastcgi-wrapper>
    SetHandler fastcgi-script
  </Location>
  Action php-fastcgi /php-fastcgi-wrapper
</VirtualHost>

(Scriptet /www/servername.dk/html/php-fastcgi-wrapper er bare et
shell-script, der kalder PHP.)

-----------------------------------

I min httpd.conf har jeg følgende:

  ...
  DirectoryIndex index.php
  ...

-----------------------------------

Beder jeg om URL'en "http://servername.dk/blah/foo/foobar";, så bliver jeg
korrekt sendt videre til "http://servername.dk/index.php"; med
"/blah/foo/foobar" i variablen $HTTP_GET_VARS["my_url"]. (Jvf. den sidste
RewriteRule.)

Beder jeg om URL'en "http://servername.dk/test1/"; eller URL'en
"http://servername.dk/test1/index.php";, og filen
"/www/servername.dk/html/test1/index.php" findes, så bliver jeg i begge
tilfælde sendt videre til "http://servername.dk/index.php"; med
"/php-fastcgi-wrapper/test1/index.php" i variablen $HTTP_GET_VARS["my_url"].
(AARGH!)

Beder jeg om URL'en http://servername.dk/test1/, og filen
"/www/servername.dk/html/test1/index.php" IKKE findes, så får jeg bare en
fejl 404, som jeg også burde.

-------------------------------------

Summa summarum: Hvis jeg kalder en URL, der peger på et PHP-script, og det
matcher med min RewriteRule, eller jeg kalder en URL, som DirectoryIndex
finder ud af er et PHP-script (index.php), så går det helt galt: Min
"Action" for PHP-scripts bliver på en eller anden måde blandet sammen med
mod_rewrite.....

Jeg skulle mene, at dette er rimeligt hard-core, og ville blive glad, hvis
der var nogle der kunne hjælpe mig med dette.


På forhånd tak,

Morten Egelund Rasmussen

______________________________________________
Everyone always asks me if I know Tyler Durden