2009-02-25 20 views
0

Tüm PHP komut dosyalarını tek bir PHP sayfası (passthrough.php) üzerinden geçiren bir web sitesinde çalışıyorum.Mod_rewrite tekrarı

.htaccess dosyası bazı özel dizinleri alıp GET değişkenleri içine çevirmek gerekiyordu , bu nedenle kontrolör komut onlarla ne yapacağını bilir. Yani:

http://example.com/ajax/method.php 

http://example.com/passthrough.php?path=method.php&mode=ajax 

ve

http://example.com/ajax/json/method.php 

vb

http://example.com/passthrough.php?path=method.php&mode=ajax&output=json 

Ve dönüşür. Bu benim .htaccess dosyasında ne var:

benim ikinci örnekte
RewriteRule ajax/(.*)$ $1?mode=ajax [QSA] 
RewriteRule (xml|json)/(.*)$ $2?output=$1 [QSA] 

RewriteRule (.*)\.php$ passthrough.php?path=$1 [QSA] 
RewriteRule passthrough.php - [L] 

, mod_rewrite, ajax kuralı yürütür o passthrough.php kuralı yürütür gibi o görünüyor. Ardından, yeniden yazma işlemini yürütür. Şimdi ajax kuralı uymuyor, ancak çıktı kuralı uygulandı, böylece uygulandı ve URL en sonunda, aşağıdaki GET vars ile sonuçlanan passthrough.php kuralı tarafından yeniden yazıldı:

path: method. php/json/method.php/json/yöntem çıkışı: json modu: go birinde bütün URL'yi işlemek için yeniden yazma motoru almanın bir yolu vardır:

sorum ajax bu nedir? böylece url /ajax/json/method.php olarak gelir, /json/method.php?mode=ajax olur, sonra /method.php?mode=ajax & output = json, sonra /passthrough.php?mode=ajax & output = json & yol = yöntem, tek seferde mi? URL'yi ayrıştırmak, bir sonraki kurala göre değiştirmek, bir sonraki kurala göre değiştirmek vb. Yerine, eşleşen her kural için .htaccess ile bir kez çalışıyor gibi görünüyor. [PT] ve [S] 'i içeren birkaç bayrağı kullanmayı denedim, ancak çok iyi belgelenmemişler. Bu sorun, kodu doğrudan geçiş komut dosyasına ileten özel koşullar yazılarak çözülebilir, ancak bu iyi bir şekilde bozuk değil ve bana 'doğru' hissetmiyor.

cevap

0

bu deneyin:

RewriteRule ^passthrough\.php$ - [L] 
RewriteRule !\.php$ - [L] 
RewriteRule ^ajax/(.*) passthrough.php?path=$1&mode=ajax [L,QSA] 
RewriteRule ^(xml|json)/(.*) passthrough.php?path=$2&output=$1 [L,QSA] 
+0

Bu işlem kapanıyor - hatayı, tümüyle karıştırılan yönteme giden yolla kaldırır, ancak hem çıkış biçimini hem de ajax'ı yapmaz. Bunu kullanacağım, sonra kaçırdığı şeyi elde etmek için PHP'deki yolu ayrıştıracağım. Teşekkürler! – stdave

0

Dürüst, sana passthrough.php içine PATH_INFO geçen ve senaryoya ayrıştırma olduğunu söylemek yanlış olduğunu düşünüyorum. Mod_rewrite'i kullanarak, (ab) tarafından bir bakım kâbusuna kendinizi ayarlıyorsunuz.