2012-09-13 16 views
17

मैं पुनः निर्देशित और .htaccess उपयोग करके किसी URL पुनर्लेखन बीच अंतर को समझना चाहते हैं। तो यहाँ एक उदाहरण है: मैं एक (इस फोन "मूल" यूआरएल) www.abc.com/ index.php?page=product_types&cat=88 तरह लिंकरीडायरेक्ट और फिर से लिखने के बीच समझौता अंतर .htaccess

लेकिन है कहो abc.com/shoes (चलो इस "वांछित" Url कॉल) में उपयोगकर्ता प्रकार, वे सामग्री देखने की जरूरत है जब उपरोक्त लिंक का। इसे पूरा करने के मैं इस करना होगा:

Options +FollowSymLinks 
RewriteEngine on 
RewriteBase/
RewriteRule ^(.*)shoes(.*)$ index.php?page=product_types&cat=88 

कुछ भी नहीं है इस कोड के साथ गलत है और यह काम कर देता है। हालांकि, अगर मैं पता बार में मूल यूआरएल टाइप करता हूं, तो सामग्री आती है, लेकिन यूआरएल नहीं बदलता है। तो यह www.abc.com/index.php?page=product_types&cat=88

के रूप में बनी हुई है लेकिन क्या होगा अगर मैं वांछित यूआरएल (/shoes) अगर मैं www.abc.com/ index.php?page=product_types&cat=88 में टाइप पता पट्टी में दिखाने के लिए चाहते थे? यह htaccess का उपयोग करके कैसे पूरा किया जाएगा? क्या मैं एक संभावित पाश में भाग रहा हूं?

+2

हाँ, मैं PHP में यह एक ऐसा चाहते हैं। .htaccess सिद्धांत में काम करने के लिए बनाया जा सकता है, लेकिन यदि आप इसे कई बार करते हैं तो लूप को रोकने के लिए रीडायरेक्ट के क्रम को प्रबंधित करना कठिन और कठिन हो जाएगा। मुझे पता है कि यह दर्द होता है, लेकिन एप्लिकेशन के भीतर से सुंदर यूआरएल का समर्थन करने के लिए आपका अनुरोध रूटिंग बनाने का समय हो सकता है। –

+0

मुझे लगता है कि मुझे यह @ जॉय मिल्स मिल गया है।एक एसईओ बिंदु दृश्य से, मुझे आश्चर्य है कि मूल यूआरएल को पुनर्निर्देशित करने में कोई खतरा है -> ऐप के भीतर से वांछित? – Ray

उत्तर

25

विवरण में से कुछ यहां पाया जा सकता: https://stackoverflow.com/a/11711948/851273

सार है कि एक पुनर्लेखन केवल सर्वर पर होता है, ग्राहक (ब्राउज़र) यह करने के लिए अंधा होता है। ब्राउज़र एक अनुरोध भेजता है और सामग्री प्राप्त करता है, अनुरोध करने के लिए सर्वर पर क्या हुआ यह कोई बुद्धिमान नहीं है।

एक रीडायरेक्ट एक सर्वर प्रतिक्रिया अनुरोध पर है, जो ग्राहक (ब्राउज़र) को एक नया अनुरोध सबमिट करने के लिए कहता है। ब्राउज़र यूआरएल के लिए पूछता है, यह यूआरएल स्थान पट्टी में क्या है, सर्वर को वह अनुरोध मिलता है और रीडायरेक्ट के साथ प्रतिक्रिया करता है, ब्राउज़र को प्रतिक्रिया मिलती है और सर्वर की प्रतिक्रिया में यूआरएल लोड करता है। स्थान पट्टी में यूआरएल अब नया यूआरएल है और ब्राउज़र नए यूआरएल के लिए अनुरोध भेजता है।

आप सर्वर पर आंतरिक रूप से फिर से लिखने बिल्कुल जंगली में मौजूद URL पर कुछ नहीं करता है। गूगल या reddit या जो भी साइट www.abc.com/index.php?page=product_types&cat=88 के लिए एक लिंक है, तो आपके आंतरिक सर्वर पुनर्लेखन नियम बिल्कुल कि लिए कुछ नहीं करता, और न ही किसी को जो कि लिंक, या किसी भी ग्राहक है कि किसी भी कारणवश कि URL का अनुरोध करने के लिए होता पर क्लिक करता है। सभी पुनर्लेखन नियम आंतरिक रूप से कुछ ऐसा बदलते हैं जिसमें सर्वर के भीतर shoes से /index.php?page=product_types&cat=88 शामिल है।

आप यह इतना एक अनुरोध क्वेरी स्ट्रिंग के सभी के साथ index.php पृष्ठ के लिए किया जाता है बनाना चाहते हैं, तो आप करने के लिए ग्राहक (ब्राउज़र) बता सकते हैं अच्छे के लिए देख यूआरएल के लिए अनुप्रेषित। आपको सावधान रहना होगा क्योंकि नियम लूप को फिर से लिखना और आपका रीडायरेक्ट आंतरिक रूप से फिर से लिखा जाएगा जो एक रीडायरेक्ट का कारण बन जाएगा जो आंतरिक रूप से फिर से लिखा जाएगा, आदि .. लूप का कारण बनता है और 500 सर्वर त्रुटि फेंक देगा। तो अगर आप अनुरोध खुद के लिए विशेष रूप से मेल कर सकते हैं:

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\?page=product_types&cat=88 
RewriteRule ^/?index.php$ /shoes [L,R=301] 

यह केवल इसे बनाने के लिए इतना जंगली में लिंक सही जगह पर उठाई प्राप्त किया जाना चाहिए। आपको यह सुनिश्चित करना होगा कि आपकी सामग्री सही लिंक उत्पन्न कर रही है। इसका मतलब है कि आपकी साइट पर सब कुछ /index.php?page=product_types&cat=88 लिंक के बजाय /shoes लिंक का उपयोग कर रहा है।

+0

बिल्कुल सही! वास्तव में मैं क्या देख रहा हूँ! धन्यवाद, @ जोन – Ray

+0

मुझे आपके द्वारा लिंक किए गए दूसरे उत्तर को नहीं देखा गया क्योंकि मैं केवल .htaccess टैग के भीतर स्वीकृत उत्तरों की खोज कर रहा था – Ray

संबंधित मुद्दे