क्या यह संभव है कि URL के लिए mod_rewrite का उपयोग किए जाने वाले प्रॉक्सी के समान हर पृष्ठ पर सामग्री को प्रतिस्थापित किया जाए?


11

क्या यह संभव है कि URL के लिए mod_rewrite का उपयोग किए जाने वाले प्रॉक्सी के समान हर पृष्ठ पर सामग्री को प्रतिस्थापित किया जाए? स्थानापन्न पर प्रलेखन स्पष्ट नहीं है।

मेरे पास कुछ ऐसे पृष्ठ हैं जो मैं उल्टे हैं, जिनके पास पूर्ण पथ हैं। इससे साइट टूट जाती है। उन्हें बदलने की आवश्यकता है और mod_rewrite जैसे टूल उन्हें नहीं उठा रहे हैं क्योंकि वे URL अनुरोध नहीं हैं।

<VirtualHost *:80>
    ServerName  servername1
    ServerAlias servername2

    ErrorLog "/var/log/proxy/jpuat_prox_error_log"
    CustomLog "/var/log/proxy/jpuat_prox_access_log" common

    RewriteEngine on
    LogLevel alert rewrite:trace2
    RewriteCond %{HTTP_HOST} /uat.site.co.jp$ [NC]
    RewriteRule ^(.*)$ http://jp.uat.site2uk.co.uk/$1 [P]

    AddOutputFilterByType SUBSTITUTE text/html
    Substitute "s|uat.site.co.jp|jp.uat.site2uk.co.uk|i"


    ProxyRequests Off

    <Proxy *>
            Order deny,allow
            Allow from all
    </Proxy>

    ProxyPass / http://uat.site.co.jp/
    ProxyPassReverse / http://uat.site.co.jp/
</VirtualHost>

HTML स्ट्रिंग को बदलने के लिए उपरोक्त में से कोई भी काम नहीं करता है

<link href="/server///uat.site.co.jp/css/css.css

साथ में

<link href="/server///uat.site2uk.co.uk/css/css.css

परिवर्तनों के बाद आत्मविश्वास:

<VirtualHost *:80>
    ServerName  jp.uat.site2uk.co.uk
    ServerAlias uat.site.co.jp
    ErrorLog "/var/log/proxy/jpuat_prox_error_log"
    CustomLog "/var/log/proxy/jpuat_prox_access_log" common
    ProxyRequests Off
    <Proxy *>
        Order deny,allow
        Allow from all
    </Proxy>
    ProxyPass / http://uat.site.co.jp/
    ProxyPassReverse / http://uat.site.co.jp/
    AddOutputFilterByType SUBSTITUTE text/html
    Substitute "s|uat.site.co.jp|jp.uat.site2uk.co.uk|ni"
</VirtualHost>

मैं उलझन में हूं। ऐसा लगता है कि यह HTML aटैग से है। उस लिंक पर क्लिक करने से संभवतः लिंक के बाद वेब ब्राउज़र में परिणाम नहीं होगा, बल्कि एक फ़ाइल ब्राउज़र (विंडोज एक्सप्लोरर) UNC को खोलने की कोशिश कर रहा है। क्या आप HTML पाठ में उस स्ट्रिंग को बदलने की कोशिश कर रहे हैं?
ग्रेगेल

वे साइट सही ढंग से काम करता है। हालाँकि एक बार जब हम इसे फ़ायरवॉल के पीछे रखते हैं तो हमको सीएसएस और छवियों के एक झुंड पर 404s मिलते हैं। आम तौर पर सब कुछ 200 हो जाता है
ZZ9

वे एक IIS सर्वर पर लिंक टैग से हैं <link href = "// fqdn / परिसंपत्ति"
ZZ9

मुझे नहीं लगता कि आप linkटैग में UNC पथ प्रदान कर सकते हैं । यदि आप कर सकते हैं, तो मैं यह नहीं कह सकता कि यह एक अच्छा विचार होगा। किसी भी घटना में, यह आपका सवाल नहीं है। Apache डॉक्स के अनुसार , substituteनिर्देश केवल Directoryब्लॉक या .htaccessफाइलों के अंदर ही मान्य है । एक <location>ब्लॉक बनाने की कोशिश करें (भले ही यह / के लिए हो) और निर्देश को वहां डाल दें।
ग्रेग

2
@GregL, URL का यह प्रारूप "प्रोटोकॉल-रिलेटिव" URL है, यह पेजों से लिंक करने के लिए पूरी तरह से वैध तरीका है, हालांकि यह आमतौर पर ज्ञात नहीं है। "#domain.com/path" ब्राउज़र को उसी प्रोटोकॉल के साथ दस्तावेज़ का अनुरोध करता है जिसका उपयोग लिंक वाले पृष्ठ का अनुरोध करने के लिए किया गया था।
तेरो किलकेनन

जवाबों:


11

एक अपाचे मॉड्यूल है जिसे mod_substitute कहा जाता है जो ऐसा कर सकता है। यहाँ एक छोटा उदाहरण दिया गया है:

<Location "/">
    AddOutputFilterByType SUBSTITUTE text/html
    Substitute "s/uat.site.co.jp/jp.uat.site2uk.co.uk/ni"
</Location>

या, जब mod_proxy के साथ संयुक्त हो:

ProxyPass / http://uat.site.co.jp/
ProxyPassReverse / http://uat.site.co.jp/

Substitute "s|http://uat.site.co.jp/|http://jp.uat.site2uk.co.uk/|i"

Mod_substitute के लिए Apache प्रलेखन में अधिक जानकारी है ।


नमस्ते, इस सुझाव के लिए धन्यवाद, दुर्भाग्य से मुझे इस रास्ते पर बहुत कम नहीं मिला है। मैंने इसे सफलतापूर्वक प्रॉक्सी के बाहर परीक्षण किया है, हालांकि। ऐसा प्रतीत होता है कि mod_proxy इसे अनदेखा करता है।
ZZ9

मैंने कुछ और जानकारी जोड़ी जो सहायक हो सकती है।
जेनी डी

1
बहुत बहुत धन्यवाद, यह काम करता है। अपाचे के साथ एक गड़बड़ हो गया है जो कि /etc/httpd/conf.d/ में मेरी फ़ाइलों का बैकअप उठा रहा है। जो कि .conf (vhost.bak) में समाप्त नहीं हुआ है।
ZZ9

7

यदि आपने अपाचे को फिर से शुरू नहीं किया है, तो ऐसा करना सुनिश्चित करें, लेकिन यदि आप पहले से ही ऐसा कर चुके हैं, तो आप एक वैश्विक आउटपुट फ़िल्टर की कोशिश कर सकते हैं, जो एक कस्टम PHP स्क्रिप्ट को चलाता है जो आपके बदले में यह देखने के लिए करता है कि क्या यह किसी कारण के लिए हल करता है। ।

संपादित करें: आपकी टिप्पणी के आधार पर, यह हो सकता है कि विकल्प काम नहीं कर रहा है क्योंकि सामग्री संकुचित है। संपीड़न को बंद करने के लिए, अपने VirtualHost में इन पंक्तियों को जोड़ें:

RequestHeader unset Accept-Encoding
RequestHeader set Accept-Encoding identity

यदि वह काम नहीं करता है, तो निम्नलिखित प्रयास करें:

पाठ्यक्रम के पथ को अपडेट करते हुए, इन्हें अपने आत्मविश्वास में जोड़ें:

#add this outside of any VirtualHost tags
ExtFilterDefine proxiedcontentfilter mode=output cmd="/usr/bin/php /var/www/proxyfilter.php"

#add these in your VirtualHost tag
RequestHeader unset Accept-Encoding 
RequestHeader set Accept-Encoding identity
SetOutputFilter proxiedcontentfilter

Xyfilter.php में निम्नलिखित की तरह कुछ कोड है:

#!/usr/bin/php
<?php
$html = file_get_contents('php://stdin');
$html = str_ireplace('uat.site.co.jp', 'jp.uat.site2uk.co.uk', $html);
file_put_contents('php://stdout', $html);

यदि यह काम करता है, तो इसे केवल टेक्स्ट / html सामग्री पर केंद्रित करें जैसा कि आपके उदाहरण में है।


मुझे पृष्ठ पर एक HTML 200 मिलता है, लेकिन ब्राउज़र दिखाता है: सामग्री एन्कोडिंग त्रुटि वह पृष्ठ जिसे आप देखने की कोशिश कर रहे हैं, उसे दिखाया नहीं जा सकता क्योंकि यह संपीड़न के अमान्य या असमर्थित रूप का उपयोग करता है।
ZZ9

आह, इन अपने VirtualHost में जोड़ें। RequestHeader ने स्वीकार-एन्कोडिंग स्वीकार किया और RequestHeader ने स्वीकार-एन्कोडिंग पहचान भी निर्धारित की
g491

मैंने आपके मूल स्थानापन्न लाइन को काम करने की कोशिश करने के लिए कुछ के साथ अपना उत्तर अपडेट किया। मैं कोशिश करूँगा कि पहले जैसा कि यह कोशिश करना आसान है और हो सकता है कि क्या हो रहा है।
15:49 पर g491

एक शानदार जवाब के लिए अपडेट करें लेकिन मुझे दूसरा जवाब काम करने में मिला
ZZ9

1
मेरे मामले में, यह संपीड़न था, इसे नस्ट किया। यह मुझे पागल कर रहा था ... बहुत बहुत धन्यवाद!
वह ब्राज़ीलियन गाइ

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.