2011-03-30 8 views
15

में मूल URL प्राप्त मैं इस पते के लिए nginx या अपाचे में एक पुनर्लेखन है:अपाचे पुनर्लेखन - पीएचपी

http://domain.com/test.php&ref=hell 

मैं कैसे PHP में इस पुनः यूआरएल का उपयोग कर सकते की तरह

http://domain.com/hello 

एक स्क्रिप्ट के लिए ? क्योंकि, अगर मैं निश्चित रूप से $_SERVER['REQUEST_URI'] का उपयोग मैं:

/test.php&ref=hell 

लेकिन मैं केवल हैं:

/hello 

यह संभव है? मदद के लिए Thanx।

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

आप आपका रीराइट कोड पोस्ट कर सकते हैं? अपाचे में, REQUEST_URI को यूआरआई को उस पृष्ठ पर पहुंचने के लिए उपयोग किया जाना चाहिए। मॉडर्राइट का उपयोग करते समय मुझे यह व्यवहार मिलता है। मैं मदद नहीं कर सकते लेकिन लगता है कि आपके एक रीडायरेक्ट कर एक modrewrite – Jase

उत्तर

5

Nginx conf में, हम request_uri साथ उपयोगकर्ता हैडर जोड़ने की जरूरत हेडर नाम में प्रतीक '_' की तरह, यह नहीं पता कि यह पहले कैसे काम करता है, शायद कुछ बदल गया nginx अद्यतन के बाद।अब मैं

proxy_set_header rewriteduri $request_uri; 

और php में उपयोग कर रहा हूँ

$_SERVER['HTTP_REWRITEDURI'] 
+2

के लिए खोज के मामले में यह ध्यान दिया जाना चाहिए कि कुछ अपाचे कॉन्फ़िगरेशन इस तरह env vars में 'HTTP_' को प्रीपेड करते हैं, इसलिए यह '$ _SERVER ['request_uri']' (नोट केस भी हो सकता है) – changokun

5

आप आमतौर पर (शायद अपाचे केवल, nginx के बारे में पता नहीं है)

  • $_SERVER['REQUEST_URI']
  • $_SERVER['REDIRECT_URL'] में अनुरोध किया गया URL पा सकते हैं

    मुझे पता है कि आपने $_SERVER['REQUEST_URI'] का उल्लेख किया है जिसमें आपका पुनः लिखा गया यूआरएल है लेकिन मेरे सभी परीक्षणों में, इसमें मूल अनुरोध है।

    आप $_SERVER क्यों डंप नहीं करते हैं और देखें कि वहां क्या है।

+3

के बजाय ऐसा नहीं है कि यह कहा गया था लेकिन, भविष्य में संदर्भ के मामले के लिए, '$ _SERVER की खोज में [ 'HTTP_X_ORIGINAL_URL']' IIS7 आईआईएस पुनर्लेखन मॉड्यूल –

+0

करने की कोशिश की का उपयोग कर + इसके लिए print_r ($ _ सर्वर) करें लेकिन मुझे यह नहीं पता कि मैं क्या प्राप्त करना चाहता हूं, शायद यह पार्सिंग और अन्य के बिना असंभव है ... – swamprunner7

+1

और apache2: '$ _SERVER ['REDIRECT_QUERY_STRING']' – SpiderWan

10

यह वास्तव में PHP सेटअप पर निर्भर करता है। Mod_php के साथ आपको अभी भी REQUEST_URI में मूल अनुरोध पथ है। सीजीआई या फास्टसीजीआई सेटअप के लिए यह आमतौर पर REDIRECT_URL है। सुनिश्चित करने के लिए आपको phpinfo() पृष्ठ देखना होगा।

यदि आपको वास्तव में कुछ भी नहीं मिल रहा है जो मदद करेगा, तो यह धोखाधड़ी का समय है! आप अपने RewriteRule अनुकूलित कर सकते हैं इस तरह अपने chosing के एक वातावरण चर में मूल URL बनाए रखने के लिए:

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

यह तो $_SERVER["ORIG_URI"] के रूप में उपलब्ध हो सकता है, या तुम सिर्फ $ _GET [ 'रेफरी के साथ URI से प्राप्त कर सकते हैं ']। लेकिन आपको इस चाल का उपयोग सभी संभावित रिवाइट्रूल्स पर करना होगा। किसी कारण nginx डॉन 'के लिए

echo $_SERVER['HTTP_REQUEST_URI']; 

upd

: php में

proxy_set_header request_uri $request_uri; 

और पढ़ा यह: