.htaccess směrnice, * ne * přesměrování některé adresy URL

hlasů
19

V aplikaci, která silně spoléhá na .htaccessRewriteRules svými PrettyURLs (CakePHP v mém případě), jak mám správně nastavit směrnice vyloučit určité adresáře z tohoto přepisu? To znamená:

/appRoot/.htaccess
         app/
         static/

Ve výchozím nastavení každý požadavek, aby /appRoot/*se přepisuje třeba vyzvednout app/webroot/index.php, kde je analyzován a odpovídající akce regulátoru jsou vyvolána. To se provádí pomocí těchto směrnic .htaccess:

RewriteBase /appRoot

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

Teď chci vyloučit několik adresářů jako statický / z tohoto přepisu. Snažil jsem se to před dortu RewriteRules:

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

Funguje to do té míry, že požadavky jsou již přepsán ne, ale nyní jsou všechny žádosti jsou vynechány, a to i legitimní požadavky na dort, který by se neshodují ^(static|otherDir).*$.

Zkoušel jsem několik variant těchto pravidel, ale nemůže se dostat do práce, jak chci.

Položena 06/08/2008 v 09:15
zdroj uživatelem
V jiných jazycích...                            


3 odpovědí

hlasů
6

A správná odpověď 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]

Pořád nechápu, proč byl soubor index.php v kořenovém adresáři s názvem zpočátku dokonce s těmito směrnicemi na svém místě. To je nyní umístěn v

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

a řešit prostřednictvím Cake stejně. S tímto na místě teď, myslím, že by to fungovalo i (mírně se změnil verze Mikeova návrh, nevyzkoušený):

RewriteCond $1      !^(a|bunch|of|old|directories).*$ [NC]
RewriteRule ^(.*)$  app/webroot/$1 [L]
Odpovězeno 07/08/2008 v 07:09
zdroj uživatelem

hlasů
1

Mohl byste neplatí podmínka následujícími pravidly, ale s negací, stejně jako v (s určitou smlouvy variací, nejsem moc dobrý v zapamatování .htaccess pravidla, takže vlajky by mohlo být špatně):

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

RewriteCond $1 !^(static|otherDir).*$ [NC]
RewriteRule ^$ app/webroot/$1 [L]
Odpovězeno 06/08/2008 v 09:26
zdroj uživatelem

hlasů
1

Odstraňte z předchozích pravidel [L]:

RewriteBase /appRoot

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

[L] znamená „Zastavte přepisování procesu a tady neplatí žádné další prepisovacími.“

Odpovězeno 06/08/2008 v 09:19
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more