Apache mod_rewrite ve% {} REQUEST_URI sorun

3 Cevap php

biz şu PHP sayfası "index.php" var varsayalım:

<?
if (!isset($_GET['req'])) $_GET['req'] = "null";
echo $_SERVER['REQUEST_URI'] . "<br>" . $_GET['req'];
?>

ve aşağıdaki dosya "htaccess.":

RewriteRule ^2.php$ index.php?req=%{REQUEST_URI}
RewriteRule ^1.php$ 2.php

Şimdi, erişim "index.php" let. Biz bu olsun:

/index.php
null

Bu serin. Erişim "2.php" edelim. Biz bu olsun:

/2.php
/2.php

Bu çok serin. Ama şimdi "1.PHP" bir göz atalım:

/1.php
/2.php

Yani ... "1.PHP" için istiyoruz, sessizce sessizce için "index.php? Req =% {} REQUEST_URI" yönlendirir "2.php" yönlendirir, ama burada "% {} REQUEST_URI" görünüyor "2.php" (biz after ilk yönlendirmede arıyorsanız sayfa) ve $ _SERVER ['REQUEST_URI'] olmak "1.php" (özgün istek) 'dir.

Bu değişkenler eşit olması gerekmiyor mu? Ben sadece original isteğine dayanan bir yönlendirme yapmaya çalışıyor gibi bu bana bugün baş ağrısı bir sürü verdi. Ben bile bir yönlendirme sonra bana özgün istek söyleyecektir. "Htaccess" kullanabilirsiniz herhangi bir değişken var mı?

Teşekkür peşin ve ben kendimi açıkça yaptık umuyoruz. Bu benim ilk yazı var :)

3 Cevap

Eh ben sorunu çözüldü sanırım. "GET / HTTP/1.1 123.php:" Ben temelde böyle bir şey içeren% {THE_REQUEST} değişkeni kullanılır. Hatta bir yönlendirme sonra aynı kalır. Yardımlarınız için teşekkürler herkese! :)

Ben sizin ihtiyaçlarınızı karşılayacak mı emin değilim, ama REDIRECT_REQUEST_URI, sonra orada değilse, REQUEST_URI bakmayı deneyin. Sen ne gerçekten arıyorsanız orijinal tanım olduğunu Gumbo cevabı için yorumunuzda söz; Sunucu değişkenleri REDIRECT_* sürümleri Apache bu tür bir şey kullanılabilir yapmak için çalışır nasıl vardır.

Sadece kurallarının sırasını değiştirmek ve işe yarıyor:

RewriteRule ^1\.php$ 2.php
RewriteRule ^2\.php$ index.php?req=%{REQUEST_URI}

Ya da sadece tek bir kural kullanabilirsiniz:

RewriteRule ^(1|2)\.php$ index.php?req=%{REQUEST_URI}