Mod_rewrite kullanarak kaynak seçimini Basamaklı

3 Cevap php

Ben bir çekirdek ve çekirdek proje özelleştirme varsayılan dönüş bir proje ad, orada bir uygulamayı kurduktan içine arıyorum. Bu uç id css gibi çeşitli kaynaklar kaskad edebilmek istiyorum, excersize amaçları için javascript vb ive gibi bu basitleştirilmiş

./.htaccess
./first/firstonly.txt
./first/both.txt
./second/secondonly.txt
./second/both.txt

beklenen davranış bir istek saniyede bakmadan önce ilk varlığı için kontrol ve nihayet 404 atma olacaktır olacaktır.

for baseurl/firstonly.txt would hit ./first/firstonly.txt (200),
whereas baseurl/secondonly.txt would try ./first/secondonly.txt (404) then ./second/secondonly.txt (200).
baseurl/both.txt would hit ./first/both.txt (200) and go no further.
baseurl/nonexistant.txt (404) would run through the cascades and return 404.

Ben mod_rewrite ile oldukça yarışmak değilim, bu yüzden burada temellerini konuşmak için ihtiyaç hissetmiyorum. Ne bu uygulama en verimli (aklı başında) yolu olurdu? Zaman şeylerin çoğu ilk hit bulunabilir olacak gibi, bir kenara endişeleri hızlandırın.

3 Cevap

RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-f
RewriteRule ^Public/(.*)$ Application/Public/$1 [L]

RewriteCond %{ENV:REDIRECT_STATUS} 200
RewriteRule .* - [L]

RewriteRule ^(css|scripts|images|assets|flash)/(.*)$ Public/$1/$2 [L]

Bu (yukarıdaki örnekte sandbox dışında) son çalışma çözümdür.

Bu kuralları deneyin:

RewriteEngine on
RewriteRule ^(first|second)/ - [L]
RewriteCond %{DOCUMENT_ROOT}/first/$0 -f
RewriteRule ^[^/]+$ first/$0 [L]
RewriteCond %{DOCUMENT_ROOT}/second/$0 -f
RewriteRule ^[^/]+$ second/$0 [L]

Bazı diğer potansiyel çözümleri

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !^first
RewriteCond %{REQUEST_URI} !^second
RewriteRule ^([^/]+\.?[^/])*$ first/$1 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !^second
RewriteRule ^first/([^/]+\.?[^/])*$ second/$1 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !^(first|second).*$
RewriteRule .* /404.html [L]

veya

RewriteCond %{REQUEST_URI} 404.html
RewriteRule .* - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !^first
RewriteCond %{REQUEST_URI} !^second
RewriteRule ^([^/]+\.?[^/])*$ first/$1 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !^second
RewriteRule ^first/([^/]+\.?[^/])*$ second/$1 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !^(first|second).*$
RewriteRule .* /404.html [L]

Benim kişisel test im-f çek yalnızca belge kök değilseniz şeyler zor kılan bir tam dosya yolları, karşı doğru olduğunu fark. Bu dosyaya yeniden ve daha sonra REQUEST_URI üzerinde-f yaparak ele alınabilir?