2009-07-01 17 views
8

मैं एक साथ कुछ htaccess कोड कि example.com/filename/ में example.com/filename.php हो जाएगा (और स्लेश मजबूर) डाल करने के लिए कोशिश कर रहा हूँ - मैं विभिन्न दृष्टिकोण की कोशिश की है, लेकिन हर hasn उपफोल्डर्स पर पिछली स्लैश इत्यादि के साथ मुद्दों पर 500 त्रुटियों से काफी सही काम नहीं किया है ...एचटीएसीएएस कोड और + बल पीछे की ओर स्लैश जोड़ें?

कृपया मदद करें!

+1

आप वास्तव में दृष्टिकोण आप की कोशिश की उल्लेख नहीं किया है - (यह मानते हुए फिर से लिखने के नियमों के अपने वर्तमान सेट कर रहे हैं क्या आप mod_rewrite का उपयोग कर रहे हैं)? यदि आप mod_rewrite का उपयोग नहीं कर रहे हैं, तो आप क्या उपयोग कर रहे हैं? –

+0

रिवाइटबेस/ रिवाइट्रूल ^() $ index.php [एनसी, एल] रिवाइटकॉन्ड% {REQUEST_URI}! (^ /?। * \ .. * $) [एनसी] रिवाइट्रूल^(। *) $ $ 1.php [एनसी] वर्तमान में फ़ोल्डर गहराई के बावजूद फ़ाइलों से .php एक्सटेंशन को हटाने के लिए ठीक काम करता है। हालांकि, 404 त्रुटि में एक परिणाम जोड़ना, और मजबूर स्लैश समाधान को एकीकृत करने के सभी प्रयासों ने समस्याएं पैदा की हैं। –

+0

कृपया एक उत्तर स्वीकार करें, यह प्रश्न अन्य प्रश्नों से भी जुड़ा हुआ है। –

उत्तर

0

आप here पर सवाल उठाने का प्रयास कर सकते हैं। जबकि प्रश्न का समाधान प्रासंगिक नहीं है (अभी तक ...) प्रश्न स्वयं ही पुनर्लेखन नियमों का एक सेट प्रदान करता है जिसे आप अपनी साइट पर उपयोग करने में सक्षम हो सकते हैं।

यदि आपको यूआरएल में प्रतीकों की आवश्यकता है तो आप विशिष्ट ए-जेए-जेड -9 के बजाय "। *" का उपयोग कर सकते हैं, लेकिन यदि आप संभावित पीछे की स्लैश की तलाश में हैं तो आप "। * का उपयोग करना चाहेंगे। " बजाय। "। *" की लालच से बचने के लिए यह एक मानक नियमित अभिव्यक्ति सुविधा है।

+0

हम्म। यही कारण है कि एक छोटे से मदद की, और इसे का उपयोग अब मुझे करने के लिए नेतृत्व किया है: RewriteCond% {REQUEST_FILENAME} -d RewriteCond% {REQUEST_FILENAME} \ php -f RewriteRule^([^ /] +)/$ $ 1.php । । [एक-zA-Z0-9] # स्लैश जोड़े जाने के लिए RewriteCond% {REQUEST_FILENAME}! -f RewriteCond% {REQUEST_FILENAME}! -d RewriteCond% {REQUEST_URI}! (\ बाध्य करता है {1,5 } | /) $ रिवाइट्रूल (। *) $/$ 1/[आर = 301, एल] यह एक उपनिर्देशिका में छोड़कर, जब यह 404 देता है, तो यह पूरी तरह से काम करता है (स्ट्रिप्स। Php। और एक पिछला स्लैश को मजबूर करता है) त्रुटि :( –

+0

! (\। [ए-जेए-जेड 0-9] {1,5} | /) $ शायद होना चाहिए! (([ए-जेए-जेड -9] /?) +) $। अगर मैं मैं गलत नहीं हूँ कि मैच होगा सभी अल्फान्यूमेरिक वर्णों के बाद एक (वैकल्पिक) "/", और एक या अधिक बार मेल खाता है। –

2
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule ^([^/]+)/$ $1.php 
RewriteRule ^([^/]+)/([^/]+)/$ /$1/$2.php 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$ 
RewriteRule (.*)$ /$1/ [R=301,L] 

मदद लोगों के लिए धन्यवाद - एक आकर्षण की तरह काम करता है।

+0

क्या यह समाधान है? उत्तर के रूप में नहीं चुना गया है .... – Angela

13

इस प्रयास करें:

RewriteCond %{THE_REQUEST} ^GET\ /[^?\s]+\.php 
RewriteRule (.*)\.php$ /$1/ [L,R=301] 

RewriteRule (.*)/$ $1.php [L] 

पहला नियम /foo/bar/ को /foo/bar.php बाह्य के अनुरोधों पुनर्निर्देश। और दूसरा नियम /foo/bar/ आंतरिक रूप से /foo/bar.php के अनुरोधों को फिर से लिखता है।

और स्लैश मजबूर करने के लिए, इस नियम का प्रयास करें:

RewriteCond %{REQUEST_FILENAME}.php -f 
RewriteRule .*[^/]$ $0/ [L,R=301] 
6

Gumbo का यह समाधान फ़ाइलों के लिए अच्छा काम करता है, फिर भी यह निर्देशिका के साथ काम नहीं करता। दूसरे शब्दों में:

mysite.com/file1.php के लिए, यह mysite.com/file1/ दिखाता है जो बहुत अच्छा है। फिर भी, यह निर्देशिकाओं के लिए अच्छी तरह से काम नहीं करता है। अगर मैं निम्न निर्देशिका तक पहुँचने का प्रयास, mysite.com/dir1 (कि index.php फ़ाइल के अंदर शामिल हैं) के बजाय http:/mysite.com/dir1/index.php की सामग्री और यूआरएल दिखाने का:

: mysite.com/dir1/, यह 404.

मेरे समाधान के आसपास यह था रिटर्न

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{THE_REQUEST} ^GET\ /[^?\s]+\.php 
RewriteRule (.*)\.php$ /$1/ [L,R=301] 


RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule (.*)/$ $1.php [L] 

RewriteCond %{REQUEST_FILENAME}.php -f 
RewriteRule .*[^/]$ $0/ [L,R=301] 

दूसरे शब्दों में, यदि कोई निर्देशिका हो तो कुछ भी नहीं करना।

उम्मीद है कि यह मदद करता है।

मूल समाधान के साथ एक और समस्या यह है कि सीएसएस और छवियों को लोड नहीं किया जाता है जब तक कि मैं सीएसएस फ़ाइल के पथ और पूर्ण पथ पर छवियों को परिवर्तित नहीं करता।

क्या इसे हल करने का कोई अन्य तरीका है, इसके बजाय वेबसाइट में सभी फ़ाइलों में सभी पथों को पूर्ण करने के लिए।

बहुत बहुत धन्यवाद।

+0

यह जोनो एल्डर्सन के प्रश्न के लिए एक एवर नहीं है। कृपया एक नया प्रश्न खोलें। – Gumbo

0

पथ के लिए आप अपने PHP पृष्ठों पर <base href="yourpath" /> जोड़ सकते हैं।

0

इस प्रयास करें, यह एक मेरी अपाचे पर काम करता है, आप मैन्युअल पिछले स्लैश को दूर भी जब:

Options +FollowSymLinks -MultiViews 
RewriteEngine On 

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{THE_REQUEST} ^GET\ /[^?\s]+\.php 
RewriteRule (.*)\.php$ /$1/ [L,R=301] 
RewriteRule ^([^/]+)/([^/]+)/$ /$1/$2.php 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$ 
RewriteRule (.*)$ /$1/ [R=301,L] 
संबंधित मुद्दे