2015-08-27 7 views
8

मेरा ग्राहक की वेबसाइट वर्तमान में mod_php के साथ अपाचे सर्वर पर चल रही है। सभी एप्लिकेशन के मार्ग .htaccess फ़ाइल में परिभाषित हैं (नीचे दिए गए कोड को देखें)। अब वह अपाचे और php-fastcgi चलाने वाले सर्वर पर माइग्रेट करने का प्रयास कर रहा है, लेकिन मार्ग लंबे समय तक काम नहीं कर रहे हैं।कोई इनपुट फ़ाइल निर्दिष्ट नहीं है - अपाचे और php-fastcgi

<IfModule mod_rewrite.c> 

    RewriteEngine On 

    # Redirect 
    RewriteBase/
    RewriteCond %{REQUEST_FILENAME} -s [OR] 
    RewriteCond %{REQUEST_FILENAME} -l [OR] 
    RewriteCond %{REQUEST_FILENAME} -d 
    RewriteRule ^.*$ - [NC,L] 
    RewriteRule "^noticias/?$" index.php/noticias/frontend/list/ [L,QSA] 
    RewriteRule ^.*$ index.php [NC,L] 

</IfModule> 

जब मैं http://domain.tld/noticias का उपयोग, मैं No input file specified मिलता है, और अपाचे में [fcgid:warn] mod_fcgid: stderr: PHP Warning: Unknown: function '1' not found or invalid function name in Unknown on line 0 error_log, लेकिन अगर मैं मार्ग का उपयोग सीधे http://domain.tld/index.php/noticias/frontend/list/ यह ठीक काम करता है।

अद्यतन

मैं एक काम कर समाधान ढांचे व्यवहार के कुछ बदल रहा है मिल गया। अगर किसी के पास ढांचे को बदलने के बिना समाधान है (शायद अपाचे या PHP कॉन्फ़िगरेशन में), तो मैं गर्व से जवाब का पुरस्कार दूंगा।

+0

नए सर्वर पर mod_rewrite स्थापित है? – Pipe

+0

@ पाइप हां, मैंने इसे जांचने के लिए अन्य परीक्षण चलाए। – LucasFerreira

+0

आप किस होस्ट का उपयोग कर रहे हैं? – Bugfixer

उत्तर

5

@ user3584460 द्वारा sugested रूप में, मैं वांछित नियंत्रक/एक क्वेरी स्ट्रिंग पैरामीटर के रूप में पारित करने के लिए कार्रवाई मेरे सारे मार्गों बदलने का फैसला किया। यहां यह कैसे किया गया था।

मैं एक _url पैरामीटर पारित करने के लिए सभी मार्गों बदल दिया है:

RewriteRule "^noticias/?$" index.php?_url=/noticias/frontend/list/ [L,QSA] 

इस तरह से मैं "नहीं इनपुट फ़ाइल निर्दिष्ट" त्रुटि नहीं मिलेगा, लेकिन ढांचे (Zend) मार्ग को पहचान नहीं होता है, और होगा हमेशा होमपेज दिखाएं।

मार्ग डिस्पैचर की उम्मीद $requestUri चर प्रारूप index.php/module/controller/action में होना है, लेकिन .htaccess में परिवर्तन के साथ, यह index.php?_url=/module/controller/action था। तो मुझे Zend_Controller_Request_Http कक्षा में कुछ बदलाव करना पड़ा, इसलिए यह रूपांतरण करेगा।

तो मैं setRequestUri विधि के लिए निम्न लाइनों कहा:

public function setRequestUri($requestUri = null) 
{ 
    // ... 

    // begin changes 
    preg_match('/_url=([a-zA-Z0-9\/\-_\.]+)&?(.*)/', $requestUri, $matches); 
    if (count($matches) == 3) 
     $requestUri = '/index.php' . $matches[1] . '?' . $matches[2]; 
    // end changes 

    $this->_requestUri = $requestUri; 
    return $this; 
} 

अब यह ठीक काम करता है।

2

बदलें noticias के साथ अपने लाइन:

RewriteRule ^noticias/?$ index.php/noticias/frontend/list/ [L] 
+0

अभी भी वही त्रुटि है, और मुझे क्वेरी स्ट्रिंग पैरामीटर तक पहुंच के लिए ध्वज QSA की आवश्यकता है। – LucasFerreira

+0

नई क्वेरी स्ट्रिंग के बिना '[QSA]' जोड़ने की आवश्यकता नहीं है। लेकिन मुझे लगता है कि आपने अपना प्रश्न सही कर दिया है – Croises

1

हम कभी-कभी उन साइटों पर देखते हैं जो पुनर्लेखन का उपयोग करते हैं। हमने इसे फिर से लिखकर बदल दिया। पुराने लाइन होगा कुछ की तरह:

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

हम इसे में बदल:

RewriteRule ^(.*)$ _routing.php [L] 

यह समस्या हल हो गई।

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