2010-08-04 11 views
5

मैं अपनी परियोजनाओं में से एक में केकफ़्पी का उपयोग कर रहा हूं और मेरा ग्राहक चाहता है कि साइट यूआरएल .html के साथ समाप्त हो और सामान्य मित्रवत यूआरएल न हो। मैं सोच रहा था कि क्या इसके किसी भी रूटिंग तकनीक के माध्यम से केकफ़्पी में ऐसा करना संभव है। कृपया मदद करे।मैं केकेएचपी में अपने सभी यूआरएल में .html कैसे जोड़ सकता हूं?

+0

यह भी देखें [केकेपीएचपी में प्रत्येक यूआरएल में एक उपसर्ग जोड़ना] (http://stackoverflow.com/questions/1794412/adding-a-prefix-to-every-url-in-cakephp) – deceze

+0

मुझे सुझाव है कि आप समझाएंगे आपका ग्राहक क्यों महत्वपूर्ण है –

+0

ऐसा लगता है कि ग्राहक को अधिक शिक्षा की आवश्यकता हो सकती है। मैं किसी भी कारण से नहीं सोच सकता कि एक। एचटीएमएल एक्सटेंशन की आवश्यकता क्यों होगी। क्या कोई मुझे प्रबुद्ध कर सकता है? –

उत्तर

2

मार्गों का उपयोग किए बिना इस का समाधान करना था। पृष्ठों के लिए डिफ़ॉल्ट मार्ग प्रविष्टि रखा:

Router::connect('/pages/*', array('controller' => 'pages', 'action' => 'display')); 

और प्रदर्शन कार्रवाई में .html एक्सटेंशन हटा दिया और संबंधित दृश्य गाया:

preg_replace('/\.html$/','',$view); 
$this->render(null,'default',$view); 

बुला जबकि पृष्ठ 'ext' होने का जोड़ा।एचटीएमएल

2

this page के अनुसार आप इस

Router::connect('/(.*).html', array('controller' => 'pages', 'action' => 'display'));

की तरह कुछ कर सकते हैं, लेकिन जैसा कि आप एक्सटेंशन के बारे में बात कर रहे हैं, कि अन्य परिणाम हो सकते हैं।

+0

हाय लुकास हेनिक्स, लिंक के लिए धन्यवाद। मैंने कोशिश की लेकिन यह मेरे लिए काम नहीं कर रहा है ... यह मुझे लापता नियंत्रक त्रुटि दे रहा है। –

0

आपको HTML एक्सटेंशन को अपाचे में PHP मॉड्यूल में भी जोड़ना होगा। मुझे बिल्कुल समायोजन की आवश्यकता नहीं है लेकिन यह /etc/httpd/httpd.conf फ़ाइल में होगा। (यह फ़ाइल आपके सर्वर के ओएस के आधार पर थोड़ी अलग जगह में हो सकती है।) बस PHP मॉड्यूल के साथ .php को संबद्ध करने वाली रेखा की तलाश करें। मेरा मानना ​​है कि आप इसे .htaccess फ़ाइल में भी परिभाषित करने में सक्षम हो सकते हैं लेकिन मौसम या आप httpd.conf फ़ाइल में जो करने की अनुमति दे रहे हैं उस पर निर्भर नहीं कर सकते हैं।

+0

यह आवश्यक नहीं होगा क्योंकि अपाचे केवल केक, एक्सटेंशन और सभी के माध्यम से सब कुछ रूट करेगा, क्योंकि .html फ़ाइलों में से कोई भी वास्तव में मौजूद नहीं है। यदि आपको भौतिक HTML फाइलें हैं जिन्हें आप PHP द्वारा संसाधित करना चाहते हैं, तो आपको केवल वही करने की ज़रूरत है, जो यहां नहीं है। – deceze

5

राउटर :: url() (जिसे एचटीएमएलहेल्पर :: लिंक() और कंट्रोलर :: रीडायरेक्ट()) जैसे अन्य तरीकों से बुलाया जा सकता है, उनमें से एक 'ext' है। इसे 'html' पर सेट करने का प्रयास करें। उदा:

echo $this->Html->link('Products', array('controller' => 'products', 'action' => 'index', 'ext' => 'html')); 

या

$this->redirect(array('controller' => 'products', 'action' => 'index', 'ext' => 'html')); 

अगर यह काम करता,() डिफ़ॉल्ट रूप से उस में जोड़ने के लिए एक तरह से आप रूटर :: यूआरएल ओवरराइड कर सकते हैं पता लगाना प्रयास करें।

+0

केकफ़्प 3 में आप यूआरएल हेल्पर को भेजे गए पैरामीटर '_ext' का उपयोग कर सकते हैं। [और देखें - https://book.cakephp.org/3.0/en/views/helpers/url.html] – nsbm

12

यह अच्छी तरह से cookbook में प्रलेखित है।

अद्यतन: http://book.cakephp.org/2.0/en/development/routing.html#file-extensions

अपने मार्गों के साथ भिन्न फ़ाइल एक्सटेंशन संभाल के लिए, आपको कॉन्फ़िग फ़ाइल अपने मार्गों में से एक अतिरिक्त लाइन की जरूरत है:

Router::parseExtensions('html', 'rss'); 

आप बनाना चाहते हैं एक यूआरएल जैसे कि /page/title-of-page.html आप नीचे दिखाए गए अनुसार अपना मार्ग बना सकते हैं:

Router::connect(
    '/page/:title', 
    array('controller' => 'pages', 'action' => 'view'), 
    array(
     'pass' => array('title') 
    ) 
); 

फिर लिंक जो मार्गों को वापस नक्शा बनाने के लिए बस का उपयोग करें:

$this->Html->link(
    'Link title', 
    array('controller' => 'pages', 'action' => 'view', 
      'title' => 'super-article', 'ext' => 'html') 
); 
+0

मुझे लगता है कि एक बेहतर दृष्टिकोण होना चाहिए जो ext => प्रदान करने के बजाय सभी नियंत्रक की क्रिया में .html जोड़ सकता है। मैन्युअल रूप से प्रत्येक नियंत्रक के लिए 'एचटीएमएल'। साथ ही, यदि .html एक्सटेंशन चालू/बंद करना चाहते हैं तो यह सभी नियंत्रक पर जाने और मैन्युअल रूप से ext पैरामीटर को जोड़ने/निकालने का कोई मतलब नहीं है। अगर आप जूमला को एसईओ चालू/बंद करना चाहते हैं तो आप क्या कहते हैं? –

+0

@RNKushwaha: यदि आप अपनी टिप्पणी से यही चाहते हैं तो आप AppHelper :: url() में प्रत्येक लिंक में फ़ाइल एक्सटेंशन इंजेक्ट कर सकते हैं। – bancer

2

Routes Configuration - File extensions प्रलेखन अनुभाग का कहना है के रूप में, आप इस्तेमाल कर सकते हैं:

Router::parseExtensions('html', 'rss'); 

यह किसी भी मिलान फ़ाइल एक्सटेंशन को हटाने के लिए रूटर बता देंगे, और फिर पार्स क्या रहता है।

0

इसकी काफी सरल, ओपन फाइल एप्लिकेशन/config/routes.php और बस लाइन

Router::connect('/', array('controller' => 'pages', 'action' => 'display', 'home')); 

अब आप .html एक्सटेंशन के साथ भी अपने नियंत्रक तरीकों का उपयोग कर सकते ऊपर

Router::parseExtensions('html', 'rss'); 

जोड़ें।

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

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

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