[Megoldva] Apache - VirtualDocumentRoot+rewrite probléma

Sziasztok,

Adott az alábbi (nem jól működő) virtualhost:


<VirtualHost *:80>

ServerAlias *.loc

AliasMatch ^\/(.*)\/(admin|portal)\/(.*)$ /PATH_TO_FRAMEWORK/modules/$1/files/$2/$3

RewriteLog "/PATH_TO_FRAMEWORK/logs/rewrite.log"
RewriteLogLevel 5
UseCanonicalName Off

VirtualDocumentRoot "/PATH_TO_FRAMEWORK/sites/domains/%0/"
<Directory "/PATH_TO_FRAMEWORK/sites/">
Options FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
DirectoryIndex index.html index.php
</Directory>
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
Order allow,deny
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/virtualhost-error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel info
CustomLog ${APACHE_LOG_DIR}/virtualhost-access.log combined
<IfModule mod_fcgid.c>

<Directory "/PATH_TO_FRAMEWORK/sites/">
Options +ExecCGI FollowSymLinks

AddHandler fcgid-script .php
AddType application/x-httpd-php .php
FCGIWrapper /usr/lib/cgi-bin/php5 .php

RewriteBase /
RewriteEngine on
RewriteCond %{REQUEST_URI} !\.(zip|xml|mp3|txt|ico|swf|bmp|jpg|css|jpeg|gif|js|html|png|pdf|exe|doc|xls|pl|cgi|style|ppt|pps|flv|tgz|eot|woff|ttf|svg)$ [NC]
RewriteRule ^(.*)$ /index.php
</Directory>
</IfModule>
</VirtualHost>

Működési elv: A portals dir-ben vannak az adott portálok könyvtárai és a domains könyvtárba egy symlink ezekre ("a" portálhoz pl domains/admin.a.com, domains/www.a.com stb. ezek mutatnak a portas/a-ra)

Eddig nem használtam virtdocroot+rewrite kombót, most viszont szükségem lenne rá az alábbi módon:
Ha a %{REQUEST_URI} fájlvége egy kiterjesztés, (doc pdf zip stb) akkor az töltődjön be, ha nem illeszkedik, abban az esetben minden kérés irányítódjon az index.php-ra.

Ehelyett nálam log alapján internal redirect történik, és már egyszerűen nem látom át hogy mit bénázok el.

Log:

rewrite 'domains/admin.domain.org/' -> '/index.php'
trying to replace prefix /PATH_TO_FRAMEWORK/sites/ with /
internal redirect with /index.php [INTERNAL REDIRECT]
...

Itt valszeg a rewrite a rossz, ha valakinek lenne ötlete megköszönném!

G.

Hozzászólások

Közben némileg javult a helyzet: (valszeg átmeneti megoldás de már legalább nagyjából azt csinálja amit szeretnék)

A felső directory részben
/PATH_TO_FRAMEWORK/sites/ helyett /PATH_TO_FRAMEWORK/sites/* lett és execCGI bekerült, illetve a rewrite így néz ki:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/].*)$ /index.php?q=$1 [L]

Így már részben jó a dolog, viszont most minden php-t meg különböző fájlokat is enged futtatni, és nem csak az általam engedélyezetteket (zip|xml|mp3|txt|ico|swf|bmp|jpg|css|jpeg|gif|js|html|png|pdf|exe|doc|xls|pl|cgi|style|ppt|pps|flv|tgz|eot|woff|ttf|svg)
ha pedig beteszem rewritecond-ba h csak ezek fussanak ezt akkor ugyancsak internal server error-t kapok.

Na hát természetesen a legegyszerűbb dolog amire nem gondoltam, leírom h legyen róla naplózás ha más is beleszaladna:


RewriteEngine On
RewriteCond %{REQUEST_URI} !(\.(zip|xml|mp3|txt|ico|swf|bmp|jpg|css|jpeg|gif|js|html|png|pdf|exe|doc|xls|pl|cgi|style|ppt|pps|flv|tgz|eot|woff|ttf|svg)$|^/index\.php$)
RewriteRule ^([^/].*)$ /index.php

A korábbi *-os és a +execCGI benne maradt, szóval azok is kellenek a működéshez.

MG