Nasıl bir JPEG veya PNG görüntüyü index.php / x isteyen değil her URL yönlendirebilirsiniz?

5 Cevap php

Örneğin, ben bu gibi bir görüntü için görünen bir URL var:

http://example.com/img/foo.png
http://example.com/img/interface/menu/bar.png
http://example.com/static/users/avatars/small/3k5jd355swrx221.jpg

O yönlendirmek istemiyorum. Onlar sadece geçmelidir. Ama sonra, ben bu gibi URL'leri var:

http://example.com/register/
http://example.com/my_account/my_picture/
http://example.com/contact/email/

.. Bir png veya jpeg için talep yok bu tür tüm URL'ler yönlendirilmesi gereken:

http://example.com/index.php/x

X yani örneğin bu örnekte example.com /, sonra her şey için nerede durduğunu:

http://example.com/register/ to
http://example.com/index.php/register/

http://example.com/my_account/my_picture/ to
http://example.com/index.php/my_account/my_picture/

http://example.com/contact/email/ to
http://example.com/index.php/contact/email/

(AcceptPathInfo etkindir)

. Htaccess de bunu yapmak için herhangi bir yolu var mı? Ben her zaman http://example.com/someKindOfMarkerHere/stuff/stuff/stuff gibi bir şey vardı ama bunu yeniden yazılması gereken bir URL olmadığını algılamak için orada someKindOfMarker olmasını istemiyorsanız sadece ben bu yapabileceğini biliyorum. Ben onları dışlamak için nasıl bilmiyorum.

5 Cevap

Ya belirli URL'leri hariç tutabilirsiniz:

RewriteEngine on
RewriteCond %{REQUEST_URI} !^/index\.php$
RewriteRule !.*\.(jpeg|png)$ index.php%{REQUEST_URI}

Yoksa varolan herhangi bir dosya hariç:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php%{REQUEST_URI}

Cehennem evet bu mümkün.

mod_rewrite oldukça kolay sizin için tüm yapacağız.

Ayrıca bir hata işleyicisi kurabilirsiniz, böylece sitenizde her 404 index.php üzerinden yönlendirildi. Bu emin tüm istekleri yük index.php (veya ön yükleme) yapma güzel bir yoludur.

Mod_rewrite bir regex ihtiyacınız olacak ve regex benim başını zarar, bu yüzden başkası birini yazalım olacak.

Umut olur. Benden fazla bilgi gerekiyorsa sadece yorum. :)

. Bir htaccess dosyasında böyle bir şey koyun ve emin mod_rewrite etkin olduğundan emin olun:

RewriteEngine On

RewriteRule ^(.*?)(?!(\.png|\.jpg))$ index.php/$1

http://www.regular-expressions.info/lookaround.html

Ben Gumbo cevabı için hafif bir varyasyonu kullanır:

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^ index.php%{REQUEST_URI}

Bu klasörlerin yanı sıra dosya (!-D bayrak) hariç - Bunu istiyorum, ama bu bütünlüğü için buraya aittir düşünüyorum olmayabilir olmayabilir.

Uzatma eşleşen dosyaları, klasör ve dosyaları mevcut aşağıdaki sayar: jpg, jpeg, png, gif. Ek uzantısı eklemek isterseniz, sadece eklemek "| uzantısı" on line 3 önce) $.

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !.(jpg|jpeg|png|gif)$
RewriteRule ^(.*)?$ /index.php/$1 [QSA,L]