htaccess düzenli ifade - dont takip desen

2 Cevap php

Ben altta düzenli ifade ile ilgili bir sorun var. Ben ancak ben php js ve css dosyaları işlemek için gereken belirli bir yol var bütün desenleri except index.php, robots.txt ve herhangi bir css ve js dizin dosya üzerinden geçmek için çalışıyorum . Normalde benim url yapısı şu şekildedir:

example.com / sınıf / fonksiyon

Ben aşağıda desen css ve js dosyaları işlemek istiyorum Diyelim ki:

example.com / view / dosya / xxxxx.js / css

normalde ben bu kod işe sanırdım ama öyle değil:

(.*)(?!view\/file)(.*)\.(js|css)

bazı garip nedenlerden dolayı bu kod işi (kaldırıldı 'görünümü' ve \ / önce eklenmiş (*).):

(\w*)(?!\/file\/)\/(.*)\.(js|css)

ama sonra ben ana dizindeki dosyaları yüklemek mümkün olmayacaktır:

example.com / file.js

Bu gibi dosyayı değiştirmek zaman, (Ben yaptım tüm \ / opsiyonel yapmak oldu) ... yine çalışmıyor:

(\w*)(?!\/file\/)(\/?)(.*)\.(js|css)

Burada orijinal htaccess dosyası:

RewriteCond $1 !^(index\.php|robots\.txt|(.*)\.(js|css)) 
RewriteRule ^(.*)$ /index.php/$1 [L]

2 Cevap

Ben doğru anladım varsayarak, böyle bir şey çalışması gerekir:

#rewrite specific css/js
RewriteRule ^view/file/(.*)\.(css|js)$ file.php?file=$1.$2 [L]

#only rewrite anything else if the path is not an existing file or directory
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

#rewrite to main handler
RewriteRule ^(.*)$ index.php/$1 [L]

Okunabilirliği ve debuggability için, ben size bazı kurallar ayrı öneririz.

# Rewrite the special case
RewriteRule ^view/file/(rest of rule)

# Skip these
RewriteRule ^index\.php$ - [L]
RewriteRule ^robots\.txt$ - [L]
RewriteRule ^(.*)\.(js|css)$ - [L]

# Main rule
RewriteRule ^(.*)$ /index.php/$1 [L]