Vra

In 'n aansoek wat swaar op .htaccess RewriteRules vir sy PrettyURLs (CakePHP in my geval), hoe kan ek korrek opgestel riglyne om sekere dopgehou van hierdie herskryf uitsluit? Dit is:

/appRoot/.htaccess
         app/
         static/

Deur verstek elke versoek om /appRoot/* word herskryf tot gepluk deur app/webroot/index.php, waar dit ontleed en ooreenstemmende kontroleerder aksies word opgeroep. Dit word gedoen deur die riglyne in .htaccess:

RewriteBase /appRoot

RewriteRule ^$ app/webroot/     [L]
RewriteRule (.*) app/webroot/$1 [L]

Ek wil nou 'n paar gidse sluit soos statiese / uit hierdie herskryf. Ek het probeer om met hierdie voor die koek RewriteRules:

RewriteCond $1 ^(static|otherDir).*$ [NC]
RewriteRule (.*) - [L]

Dit werk in so ver dat versoeke nie meer herskryf, maar nou al versoeke word oorgeslaan, selfs wettige koek versoeke, wat nie behoort te pas ^(static|otherDir).*$.

Ek het probeer om 'n paar variasies van hierdie reëls, maar kan nie kry dit aan die manier wat ek wil werk.

Was dit nuttig?

Oplossing

En die korrekte antwoord iiiiis ...

RewriteRule   ^(a|bunch|of|old|directories).* - [NC,L]

# all other requests will be forwarded to Cake
RewriteRule   ^$   app/webroot/   [L]
RewriteRule   (.*) app/webroot/$1 [L]

Ek weet nog steeds nie kry waarom die index.php lêer in die hoofdmap aanvanklik genoem is selfs met die riglyne in plek. Dit is nou geleë in

/appRoot/app/views/pages/home.ctp

en hanteer deur Cake sowel. Met dit in nou plek, dink ek dit sou as goed gewerk (effens veranderde weergawe van voorstel Mike se, ongetoets):

RewriteCond $1      !^(a|bunch|of|old|directories).*$ [NC]
RewriteRule ^(.*)$  app/webroot/$1 [L]

Ander wenke

Kan jy nie die toestand van toepassing is op die volgende reëls, maar met ontkenning, soos in (met 'n paar variasies daarvan, ek is nie te goed te onthou htaccess reëls, so die vlae kan verkeerd wees):

RewriteCond $1 !^(static|otherDir).*$ [NC]
RewriteRule ^$ app/webroot/ [L]

RewriteCond $1 !^(static|otherDir).*$ [NC]
RewriteRule ^$ app/webroot/$1 [L]

Verwyder die [L] van die vorige reëls:

RewriteBase /appRoot

RewriteRule ^$ app/webroot/    
RewriteRule (.*) app/webroot/$1

[L] beteken "Stop die herskryf proses hier en hoef nie meer te herskryf reëls nie geld nie."

Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top