2011-03-30 23 views
15

orijinal URL almak ?Apaçi yeniden yazma Bu adrese için nginx veya Apache yeniden yazmak zorunda PHP

/test.php&ref=hell 

ama sadece istiyorum: Tabii $_SERVER['REQUEST_URI'] kullanırsanız Çünkü, almak

/hello 

bu mümkün mü? Yardım için teşekkürler.

Upd nginx cnf

proxy_redirect off; 
proxy_set_header Host $host; 
proxy_set_header X-Real-IP $remote_addr; 
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 

server 
{ 
    listen 80; 
    server_name domain.test; 


    location/
    { 
    rewrite ^/(main|best|air)$ /core/feeds.php?act=$1 last; 
    proxy_pass http://127.0.0.1:8080; 
    } 
} 
+3

Eğer yeniden yazma kodu gönderebilir

proxy_set_header rewriteduri $request_uri; 

ve php kullanıyorum? Apache'de REQUEST_URI, kullanıcının sayfaya ulaşmak için kullandığı URI'yi döndürmelidir. Modrewrite kullanırken elde ettiğim davranış budur. – Jase

cevap

5

Nginx conf, biz request_uri ile kullanıcı başlığını eklemeniz gerekir Başlık ismindeki '_' sembolünü beğen, daha önce nasıl çalıştığını bilmiyorum, belki bir şeyler değişti nginx güncellemesinden sonra.Şimdi ben

$_SERVER['HTTP_REWRITEDURI'] 
+2

belirtilmelidir bazı apache yapılandırmalarının 'HTTP_' yi env'ye böldüğünü, bu yüzden '$ _SERVER [' request_uri '] '(not durumu da) olabilir. – changokun

5

Genellikle (belki Apache'nin sadece nginx bilmem)

  • $_SERVER['REQUEST_URI']
  • $_SERVER['REDIRECT_URL'] istenilen URL'yi bulabilirsiniz

    $_SERVER['REQUEST_URI']'un yeniden yazılmış URL’nizi içerdiğini biliyorum, ancak tüm testlerimde orijinal isteği içeriyor.

    Neden $_SERVER dökümünü ve orada ne olduğunu görmüyorsunuz.

+3

modrewrite yerine bir yönlendirme yaptıklarını düşünmüyorum ama sorulmadığı için değil, aranacak durumda gelecekteki başvurular için, IIS7 + için IIS yeniden yazım modülü –

+0

kullanarak, IIS7 + için $ _SERVER ['HTTP_X_ORIGINAL_URL'] 'çalıştı. print_r ($ _ SERVER) yapmak ama belki o 'imkansız ayrıştırma ve diğerleri ... – swamprunner7

+1

ve apache2 için arama durumunda kalmadan, elde istediklerimi görmüyorum: ' $ _SERVER [ 'REDIRECT_QUERY_STRING'] ' – SpiderWan

10

Bu gerçekten PHP kurulumuna bağlıdır. Mod_php ile çoğu zaman hala REQUEST_URI'da orijinal istek yoluna sahip olursunuz. CGI veya FastCGI kurulumları için oldukça yaygın olan REDIRECT_URL. Emin olmak için phpinfo() sayfasını kontrol etmeniz gerekecektir.

Gerçekten yardımcı olacak bir şey bulamazsanız, o zaman aldatma zamanı! Bu Chosing bir ortam değişkeni orijinal URL'yi korumak için benzeri Sen RewriteRule uyarlayabilirsiniz:

RewriteRule ^(\w+)$ test.php?ref=$1 [E=ORIG_URI:/$1] 

Bu da $_SERVER["ORIG_URI"] olarak kullanılabilir olacaktır, ya da sadece $ _GET [ 'ref ile URI'dan alabilirsiniz ']. Ancak, bu hileyi tüm potansiyel RewriteRules'de kullanmanız gerekir. php bunu

proxy_set_header request_uri $request_uri; 

Ve okumak:

echo $_SERVER['HTTP_REQUEST_URI']; 

upd

nedense nginx don' için

İlgili konular