Már régebben is megfigyeltem, hogy az Apache .htaccess feldolgozása nem éppen korrekt. Félek, most ismét egy ilyen estebe csöppentem bele.
Egy többdomaines környezetben az egyik VirtualHost a .htaccess fájlban két rewriteRule-t is használ:
RewriteCond %{SERVER_PORT} ^80$
RewriteRule ^(.*)$ https://www.domain.hu/$1 [L]
RewriteCond %{HTTP_HOST} !^www.domain.hu [NC]
RewriteRule ^(.*)$ https://www.domain.hu/$1 [L]
Továbbá a VirtualHost-ban van egy ScriptAlias is definiálva a domainre:
ScriptAlias /mappa/ /usr/lib/cgi-bin/
ScriptAlias /mappa /usr/lib/cgi-bin/
Na, most az a szépsége ennek a cgi scriptnek, hogy csak a domain.hu kérelemmel fut. (Nem általam írt, nem lehet belenyúlni.) Ha a kérelem www.domain.hu/mappa/, akkor elhasal.
Ezt kellene megoldani .htaccess-ből, de nekem eddig nem sikerült.
A hivatalos megoldások nem működnek, mindig 404 errort kapok.
1:
RewriteCond %{SERVER_PORT} ^80$
RewriteCond %{REQUEST_URI} !^/mappa
RewriteRule ^(.*)$ https://www.domain.hu/$1 [L]
RewriteCond %{HTTP_HOST} !^www.domain.hu [NC]
RewriteCond %{REQUEST_URI} !^/mappa
RewriteRule ^(.*)$ https://www.domain.hu/$1 [L]
2:
RewriteRule ^(mappa)($|/) - [L]
RewriteCond %{SERVER_PORT} ^80$
RewriteRule ^(.*)$ https://www.domain.hu/$1 [L]
RewriteCond %{HTTP_HOST} !^www.domain.hu [NC]
RewriteRule ^(.*)$ https://www.domain.hu/$1 [L]
Ha az eredeti két szabályt kiszedem a .htaccess fileból, és beírom a domain.hu/mappa címet, remekül megy minden.
Ha csak a második szabályt szedem ki, és beírom a https://domain.hu/mappa címet, akkor is remekül megy. Tehát nekem elég a második szabályra egy működő megoldás, csak legyen cím, amivel el lehet érni a mappa scriptet.
Ötlet is érdekel a megoldásra, és magyarázat is, hogy hol rontom el.
Hozzászólások
A nem scriptre is 404? Mert akkor a VirtualHost a domain.hu-ra szól, de a www.domain.hu-ra nem.
Amikor a /mappa url-re 404-et kapok, olyankor a domain többi részre rendben elérhető, maga a weboldal zavartalanul megy.
1. RewriteCond végéről nem hiányzik egy [OR] ?
A mappa létezik vagy sem? vagy csak egy alias?
Az [OR] nem hiányzik, hiszen éppen azt akarom, hogy az eredeti RewriterCond ÉS az új feltétel, (azaz, hogy nem /mappa kezdetű az url) együtt legyenek érvényesek a rewirteRule végrehajtásához. Vagyis /mappa esetén ne hajtódjon végre semmiképp.
A /mappa nem létezik a domainen belül, az csak egy alias a cgi scriptre.
Teljesen korrekt az, csak még nem tanultad meg eléggé. Félreértések elkerülése végett: én sem.
Gábriel Ákos
Tudom: a számítógép mindig utasításainknak és nem elvárásainknak megfelelően működik.
De szerintem az Apache dokumentációja szerint ezeknek működni kellene, tehát talán mégsem korrekt annyira.