mod_rewrite parametreler için bazı klasörleri dönüştürmek

3 Cevap php

Hi I have a site where I'd like to convert the first subfolder into a parameter (from a set list of subfolders), so

http://localhost/mysite/folder1/dosomething.php

yukarıda gösterildiği gibi görüntülenir, ancak PHP it gibi görünüyor:

... Localhost / sitem /? Kuruluş = klasör1 dosomething.php

Ben sadece belirli klasörlerde (yani değil ... localhost / sitem / admin / örneğin) bunu yapmak gerekiyor ve ben hesaba ya da zaten parametreleri URL'ye orada eklenir olmayabilir gerçeğini almak gerekir

Birden kuruluşlar kullanmak için bir site oluşturma ve organizasyon dayalı ediyorum, sitede renkler gibi farklı olması gerekir, ancak her kuruluş aynı sayfaları kullanarak olacak, ve müşteri URL örgüt SHORTCODE istiyor. Bunu yapmak için en iyi yolu ile mod_rewrite olacağını düşündüm.

Ben denedim:

rewriterule ^folder1/(.*) $1&organisation=folder1 [NC]

ama bu zaten URL'ye bağlı parametreler olabilir gerçeğini iş ya da işlemez. Herkes bunu yapmak için bir yol önerebilir?

Saygılarımızla ve çok teşekkürler

Yorumlarına dayanarak:

Hmm I can't get this to work. In .htaccess I have Options +FollowSymLinks RewriteEngine on RewriteRule ^folder1/(.*) $1&organisation=folder1 [NC,QSA]

Ben göz atarsanız ... server/sitename/folder1/destination.php ben hata bulunmayan bir sayfa olsun ve htaccess hata ayıklama günlüğü diyor ki:

(3) [perdir /var/www/sitename/] add path info postfix: /var/www/sitename/folder1 -> /var/www/sitename/folder1/destination.php (3) [perdir /var/www/sitename/] strip per-dir prefix: /var/www/sitename/folder1/destination.php -> folder1/destination.php (3) [perdir /var/www/sitename/] applying pattern '^folder1/(.*)' to uri 'folder1/destination.php' (2) [perdir /var/www/sitename/] rewrite 'folder1/destination.php' -> 'destination.php&organisation=folder1' (3) [perdir /var/www/sitename/] add per-dir prefix: destination.php&organisation=folder1 -> /var/www/sitename/destination.php&organisation=folder1 (2) [perdir /var/www/sitename/] strip document_root prefix: /var/www/sitename/destination.php&organisation=folder1 -> /sitename/destination.php&organisation=folder1 (1) [perdir /var/www/sitename/] internal redirect with /sitename/destination.php&organisation=folder1 [INTERNAL REDIRECT] (3) [perdir /var/www/sitename/] strip per-dir prefix: /var/www/sitename/destination.php&organisation=folder1 -> destination.php&organisation=folder1 (3) [perdir /var/www/sitename/] applying pattern '^folder1/(.*)' to uri 'destination.php&organisation=folder1' (1) [perdir /var/www/sitename/] pass through /var/www/sitename/destination.php&organisation=folder1

3 Cevap

(Yerine onları yerine) sorgu dizesi parametrelerini eklemek için QSA bayrağı kullanın:

RewriteRule ^folder1/(.*) $1&organisation=folder1 [NC,QSA]

"Bu bayrak motor rewrite Değiştirmek yerine, mevcut dize dize ikame bir sorgu dizesi parçasını eklemek için zorlar. Eğer bir yeniden yazma kuralı ile sorgu dizesi daha fazla veri eklemek istediğinizde bunu kullanın."

Bkz Apache documentation for mod_rewrite.

Doğru kurallar olacaktır:

# rewrite for php scripts
RewriteRule ^(folder[0-9]+)(/([^/]*\.php)?)$ .$2?organisation=$1 [NC,QSA]
# rewrite for css and js (assuming they are relative to path of your htaccess)
RewriteRule ^(folder[0-9]+)/(.*) ./$2 [NC,QSA]

Bu size her yerde param gönderme sakıncası yoksa çok çalışması gerektiğini rağmen:

RewriteRule ^(folder[0-9]+)/(.*) $2?organisation=$1 [NC,QSA]

Ben öneririm

RewriteRule ^folder1/(.*)?(.*) $1?organisation=folder1&$2 [NC]
RewriteRule ^folder1/(.*) $1?organisation=folder1 [NC]

Ben RegExs ile biraz niftier birisi bir kural tho içine bu birleştirmek olabilir şüpheli

Ayrıca emin mod rewrite alarak açık var olun

RewriteEngine on

senin. htaccess içinde yeniden yazma kuralları üzerinde