2009-06-30 12 views
5

मैं बिना किसी निशान के पृष्ठों के साथ काम करना चाहता हूं। तो अब मैं अपने यूआरएल को पिछला स्लैश के बिना उसी यूआरएल पर रीडायरेक्ट (.htaccess का उपयोग करके) को पीछे छोड़ने के लिए चाहता हूं।पिछला स्लैश हटाएं

<IfModule mod_rewrite.c> 
    RewriteEngine On 

    RewriteRule (.*) public/$1 
</IfModule> 

और एक मेरी सार्वजनिक फ़ोल्डर में:

DirectoryIndex index.html index.php 
Options -Indexes 

<IfModule mod_rewrite.c> 
    RewriteEngine On   
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_FILENAME} !-f   
    RewriteRule ^(.*)$ index.php?url=$1 [PT,L] 
</IfModule> 

मैं सार्वजनिक फ़ोल्डर में .htaccess फाइल करने के लिए निम्नलिखित नियम जोड़ने की कोशिश की:

मैं दो .htaccess फ़ाइलों मिला

RewriteRule (.*)/$ $1 [R,L] 

लेकिन फिर: example.com/public/page/view/2/

को पुनर्निर्देश: example.com/**D:/webserver/**public/page/view/2

जाहिर है कौन सा मैं क्या नहीं करना चाहता ...

+0

मुझे यकीन नहीं है कि आपकी समस्या को कैसे ठीक किया जाए, लेकिन मुझे यकीन नहीं है कि यह वास्तव में आपको क्या करना चाहिए। मेरी समझ से इस तरह के यूआरएल का अनुरोध करने से: http://www.example.com/myDir अकसर उपयोगकर्ता को http://www.example.com/myDir/ पर रीडायरेक्ट करता है। इस अतिरिक्त पुनर्निर्देशन को पीछे की ओर स्लैश से बचा जा सकता है। वह स्लैश निश्चित रूप से पहचानता है कि "myDir" एक फ़ाइल के बजाय एक निर्देशिका है। – nikmd23

+0

क्या आप कह रहे हैं कि पिछला स्लैश कुछ औपचारिक/मानक/डिफ़ॉल्ट नोटेशन का हिस्सा है। उस मामले में मुझे एक समान प्रश्न मिला है। मैं पीछे की स्लैश जोड़ने के लिए रीडायरेक्ट कैसे कर सकता हूं ;-) – Erik

+0

चूंकि आप वास्तव में निर्देशिका में रीडायरेक्ट करने की कोशिश नहीं कर रहे हैं, पीछे की ओर स्लैश आपको बिल्कुल मदद नहीं करता है - असल में, यह किसी भी तरह से नहीं करता है या अन्य। आपको बस जो भी हो, उसके साथ जाना चाहिए और अपने उपयोग में सुसंगत रहना चाहिए – Fake51

उत्तर

1

y क्यों कहां कई। htaccess फाइलें हैं? किसी को सार्वजनिक/$ 1 संग्रहीत करने के लिए रीडायरेक्ट कर रहे हैं? आप रिवाइटरूल निर्देशों को ओवरराइड करने का सामना कर रहे हैं जो आपके लिए चीजों को जटिल बनाते हैं।

अपने सेटअप को जानने के बिना यह कहना मुश्किल है कि आपको रीराइट्स का उपयोग कैसे करना चाहिए - क्या आप निर्दिष्ट कर सकते हैं कि वास्तव में कौन सी चीजें दिख रही हैं?

+0

मैंने इसे सब एक .htaccess फ़ाइल में कम कर दिया है। डीबगिंग करते समय मुझे एहसास हुआ कि कुछ ब्राउज़रों ने विज़िट किए गए पृष्ठों के कुछ इतिहास के कारण स्वचालित रूप से पिछला स्लैश जोड़ा है। मेरा इंटरनेट इतिहास साफ़ करना, एक पुनर्लेखन और पुनःलेखन जोड़ना चाल था। – Erik

1

आप जोड़ने की कोशिश की है :

RewriteBase /public 
सार्वजनिक फ़ोल्डर में .htaccess फाइल करने के लिए

, प्राप्त करने के लिए:

<IfModule mod_rewrite.c> 
    RewriteEngine On    
    RewriteBase /public 

    RewriteRule (.*)/$ $1 [R,L] 

    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_FILENAME} !-f   
    RewriteRule ^(.*)$ index.php?url=$1 [PT,L] 
</IfModule> 
+0

बस कोशिश की, लेकिन यह रीडायरेक्ट नहीं होगा। – Erik

+0

क्या आपका मतलब है कि यह इस लाइन के बिना रीडायरेक्ट करता है, लेकिन इसके साथ रीडायरेक्ट नहीं करता है? साथ ही, यह आपके प्रश्न से स्पष्ट नहीं है जहां आपने 'htaccess' फ़ाइल में अपना 'रिवाइटरूल (। *)/$ $ 1 [आर, एल]' रखा है। –

+0

आपके कोड के साथ मुझे निम्नलिखित परिणाम मिलते हैं: example.com/page/view/1 >> 404 त्रुटि example.com/page/view/1/ >> example.com/public/page/ पर रीडायरेक्ट देखें/1 और 404 संदेश प्रदर्शित करने से – Erik

1

यहाँ एक अपाचे प्रलेखन से एक उदाहरण है जो आपकी समस्या का हल करने के लिए उपयोग कर सकते हैं:

स्लैश समस्या

विवरण:

हर वेबमास्टर की समस्या के बारे में एक गीत गा सकते हैं निर्देशिकाओं का संदर्भ देने वाले यूआरएल पर पिछला स्लैश। यदि वे गुम हैं, तो सर्वर एक त्रुटि को डंप करता है, क्योंकि यदि आप/~ quux/foo के बजाय/~ quux/foo/तो सर्वर foo नामक फ़ाइल की खोज करता है। और क्योंकि यह फ़ाइल एक निर्देशिका है जो शिकायत करती है। असल में यह ज्यादातर मामलों में इसे स्वयं ठीक करने का प्रयास करता है, लेकिन कभी-कभी इस तंत्र को आपके द्वारा अनुकरण करने की आवश्यकता होती है। उदाहरण के लिए के बाद आप CGI स्क्रिप्ट आदि करने के लिए जटिल यूआरएल rewritings का एक बहुत किया है

समाधान:

इस सूक्ष्म समस्या का समाधान सर्वर स्वचालित रूप से ट्रेलिंग स्लैश जाने के लिए है। इसे सही तरीके से करने के लिए हमें बाहरी रीडायरेक्ट का उपयोग करना होगा, इसलिए ब्राउजर सही छवियों का सही ढंग से अनुरोध करता है। यदि हमने केवल एक आंतरिक पुनर्लेखन किया है, तो यह केवल निर्देशिका पृष्ठ के लिए काम करेगा, लेकिन जब भी किसी भी छवि को इस पृष्ठ में शामिल किया जाएगा तो गलत होगा सापेक्ष यूआरएल के साथ, क्योंकि ब्राउज़र एक इनलाइन लाइन का अनुरोध करेगा। उदाहरण के लिए, /.gquux/foo/index.html में image.gif के लिए अनुरोध बाहरी पुनर्निर्देशन के बिना /~quux/image.gif बन जाएगा!

तो, यह चाल करने के लिए हम लिख:

RewriteEngine on 
RewriteBase /~quux/ 
RewriteRule ^foo$ foo/ [R] 

पागल और आलसी यहां तक ​​कि उनके homedir के शीर्ष-स्तरीय .htaccess फ़ाइल में निम्न कर सकते हैं। लेकिन ध्यान दें कि यह कुछ प्रोसेसिंग ओवरहेड बनाता है।

RewriteEngine on 
RewriteBase /~quux/ 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule ^(.+[^/])$ $1/ [R] 

Source

2

Wordpress क्या अपने स्थायी लिंक संरचना के आधार पर रीडायरेक्ट करता है। तो .htaccess में कोई भी बदलाव थोड़ा मदद करता है क्योंकि वर्डप्रेस उन्हें आपके लिए जोड़ देगा/हटा देगा और htacred done() के बाद wp_redirect() को peform करेगा। सबसे खराब स्थिति में आप रीडायरेक्ट लूप के साथ समाप्त होते हैं।

एक समाधान वर्डप्रेस रीडायरेक्टिंग का उपयोग बंद करना है।

// perhaps an if(is_something()) before here ... 
add_filter('redirect_canonical', '__return_false'); 

आप एक अगर बयान या अंदर इस लपेट चाहिए इस तरह जहां किसी विशिष्ट पृष्ठ/निर्देशिका/आदि के लिए एक जांच करते हैं। उपरोक्त सीधे अपनी फ़ंक्शंस फ़ाइल में डालने से वर्डप्रेस रीडायरेक्शन बंद हो जाएंगे और शायद चीजें तोड़ेंगी।

+0

बिल्कुल सही। धन्यवाद! –