.htaccess mágia

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

Szerkesztve: 2022. 05. 26., cs – 10:58

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