. Htaccess URL yeniden yazma yardım!

4 Cevap php

Benim küçük PHP çerçevesinde. Htaccess ve mod_rewrite kullanıyorum. Bu güzel çalışıyor, ama sadece index.php için her şeyi yönlendirir zorunda genişletmek istiyorum.

Benim dizin yapısı gibi bir şey bu (tabii ki basitleştirilmiş) olduğunu

apps
media
system
-- admin
jscript
templates

Benim şu anki yeniden yazma kuralları olduğunu:

RewriteEngine On
RewriteCond $1 !^(index\.php|media|jscript)
RewriteRule ^(.*)$ index.php/$1 [L,QSA]

Gördüğünüz gibi, her şey 'mydomain.com / url' index.php yönlendirilir. Ne şimdi yapmak istediğiniz bir şey 'etkialanım / admin /' 'sistem' klasörünün içindeki 'admin' dizinine doğrudan izin olduğunu. Ben de bu klasörün içinde normal şartlar istiyoruz, bu yüzden yerine temiz kullanıcılara kullanımı, ben 'mydomain.com / admin / bir-tür-file.php' gibi adresler kullanmak istiyorsunuz.

Özetle, ben sadece benim rewrite durum benim sistem / admin klasörü hariç her şeyi uygulamak istiyorum.

Bu mümkün mü? Herhangi bir yardım büyük mutluluk duyacağız!

4 Cevap

Bu URL site.com/index.php, site.com/media veya site.com/jscript ile başlamak değilse aşağıdaki tek RewriteRule geçerli olduğunu görünür.


RewriteEngine On
RewriteCond $1 !^(index\.php|media|jscript)
RewriteRule ^(.*)$ index.php/$1 [L,QSA]

Ben dürüst olacağım, ben $1 şimdiye kadar bir RewriteCond kullanılan görülebilir, fakat ilginç görünüyor değil.

Yani url nedir site.com/admin...? Eğer Peki, yeni bir RewriteRule gerekir. Ayrıca admin ilk RewriteRule tarafından yönlendirilen olsun ile başlayan URL'ler önlemek gerekir.


RewriteEngine On
RewriteCond $1 !^(index\.php|media|jscript|admin|system)
RewriteRule ^/?(.*)$ index.php/$1 [L,R]

RewriteRule ^/?(admin.*)$ system/$1 [L,R]

Update 1: system ilk RewriteRule tatbik edilmemelidir URL'lerin listesine eklenir.

Update 2, {[(1)] İlk} RewriteRule çıkarılması ile değiştirilmesi [L,R].

Sadece durumuna admin eklemek ve yönlendirmek için ek bir kural kullanabilirsiniz:

RewriteCond $1 !^(index\.php|media|jscript|admin)/
RewriteRule ^(.*)$ index.php/$1 [L,QSA]
RewriteRule ^admin/.* system/$0 [L]

Admin dizini başlığı yönlendirme insanlar ilk, sonra kalanını filtre gibi:

RewriteRule ^admin/([^/]*)$ system/$1 [L,QSA]

RewriteCond $1 !^(index\.php|media|jscript)
RewriteRule ^(.*)$ index.php/$1 [L,QSA]

Bu sadece çok 'admin' klasörünü eklemek olamazdı, sizin 'medya' ve 'JScript' klasörler zaten yeniden yazma kuralı muaf görünüyor? örneğin:

RewriteEngine On
RewriteCond $1 !^(index\.php|media|jscript|admin)
RewriteRule ^(.*)$ index.php/$1 [L,QSA]

Aslında / sistem / yönetici (çok kullanıcının tarayıcısında URL güncelleyecek olan) böyle bir mod_alias kural kullanmak istememe / Admin altında her şeyi yönlendirmek istiyorsanız:

RedirectMatch permanent ^/admin/(.*)$ http://mysite.com/system/admin/$1