मेरे रूट 404 पर लौट रहे हैं, मैं उन्हें कैसे ठीक कर सकता हूं?


82

मैंने अभी लारवेल फ्रेमवर्क सीखना शुरू कर दिया है और मैं रूटिंग के साथ एक मुद्दा बना रहा हूं।

एकमात्र मार्ग जो काम कर रहा है वह डिफ़ॉल्ट होम मार्ग है जो लारवेल से बॉक्स से बाहर जुड़ा हुआ है।

मैं विंडोज पर WAMP का उपयोग कर रहा हूं और यह PHP 5.4.3, और Apache 2.2.22 का उपयोग करता है, और मेरे पास mod_rewrite भी सक्षम है, और एक खाली स्ट्रिंग को छोड़ने के लिए application.php config फाइल से 'index.php' को हटा दिया है।

मैंने एक नया नियंत्रक बनाया है जिसे उपयोगकर्ता कहा जाता है :

class User_Controller extends Base_Controller {

    public $restful = true;

    public function get_index() 
    {
        return View::make('user.index');
    }
}

मैंने एप्लिकेशन / विचारों / उपयोगकर्ता / कुछ मूल HTML कोड के साथ index.php में एक दृश्य फ़ाइल बनाई है , और मार्गों में। मैंने निम्नलिखित में जोड़ा है:

Route::get('/', function () {
    return View::make('home.index');
});

Route::get('user', function () {
    return View::make('user.index');
});

http://localhost/mysite/publicमेरे वेब ब्राउज़र में रूट ( ) पर जाने पर पहला रूट ठीक काम करता है, लेकिन जब मैं अपने दूसरे रूट पर जाने की कोशिश करता हूं तो मुझे http://localhost/mysite/public/user404 नॉट फाउंड एरर मिलती है। ऐसा क्यों हो रहा होगा?


.Htaccess को unmodified किया गया है, जैसे यह बॉक्स से बाहर था।
जेसनमॉर्टनजेंट

ऐसा प्रतीत होता है कि डब्ल्यूएएमपी मुद्दा था। अब XAMPP में बदल गए हैं और सब कुछ बढ़िया काम करता है और जैसा होना चाहिए। क्या मुझे इस सवाल का स्व-उत्तर देना चाहिए कि WAMP मुद्दा था?
जेसनमॉर्टनजेंट

@ AquilaSolutions हाँ, आप कर सकते हैं। तो हर कोई स्पष्ट रूप से देखेगा कि आपका मुद्दा अब हल हो गया है।
जॉचलीएन

जवाबों:


25

क्या आपने इसके बजाय इसे अपने रूट फ़ाइल में जोड़ने का प्रयास किया है Route::get('user', "user@index")?

इस मामले में पाठ का टुकड़ा @, userइस मामले में, उपयोगकर्ता नियंत्रक को पृष्ठ को निर्देशित करेगा और पाठ के टुकड़े को @, indexस्क्रिप्ट को userफ़ंक्शन में निर्देशित करेगा public function get_index()

मैं तुम्हें उपयोग कर रहे हैं $restful, जिस स्थिति में आप अपने सेट कर सकते हैं Routeकरने के लिए Route::any('user', 'user@index')। यह दोनों को संभाल लेंगे POSTऔर GETबजाय उन दोनों को बाहर लिख अलग से की,।


मैं WAMP से XAMPP में बदलता हूं क्योंकि यह मुद्दा बना हुआ है। XAMPP सर्वर पर एक नया प्रोजेक्ट शुरू करने और 'के बजाय' @ 'चिन्ह का उपयोग करने के बाद। यह अब बहुत अच्छा काम कर रहा है।
जेसनमॉर्टनजेंट

1
यह WAMP के साथ ठीक काम करता है, आपको बस rewrite_module को सक्षम करना होगा। @ मुवेरा की टिप्पणी नीचे देखें।
अंजोन

3
मुझे पता है कि यह एक पुराना उत्तर है, लेकिन मेरे पास एक समान मुद्दा था: एक नया मार्ग जोड़ा गया और काम नहीं किया! (404) है। मुझे केवल कैश्ड मार्गों को साफ़ करने की आवश्यकता थी! php कारीगर मार्ग का उपयोग करते हुए: स्पष्ट
trainoasis

119

मेरे Ubuntu LAMP इंस्टॉलेशन पर, मैंने निम्नलिखित 2 परिवर्तनों के साथ इस समस्या को हल किया।

  1. Apache सर्वर पर mod_rewrite सक्षम करें sudo a2enmod rewrite:।
  2. /Etc/apache2/apache2.conf को संपादित करें , "AllowOverride" निर्देश को / var / www निर्देशिका (जो मेरा मुख्य दस्तावेज़ रूट है) के लिए बदल रहा है:AllowOverride All

फिर Apache सर्वर को पुनरारंभ करें: service apache2 restart


यह मेरे लिए पुतले से डाउनलोड की गई एक योनि मशीन पर इस मुद्दे को तय करता है।
22

5
धन्यवाद, आप जीवन रक्षक हैं।
हसन मुर्तजा

3
बहुत बहुत धन्यवाद, मैंने इसे खोजने के लिए अपने 4 घंटे बर्बाद कर दिए हैं
अंशुल मिश्रा

मैकले हाई सिएरा 10.13.3 पर लारवेल-5.4 के साथ मेरे लिए काम किया
येवगेनी

2
@McSonk, शायद सवाल खिड़कियों के लिए है। यह वैकल्पिक समाधान उबंटू के लिए काम करता है। शुक्रिया दोस्त।
फेंडी सेप्टियावन

63

WAMP आइकॉन पर क्लिक करके wamp आइकन -> अपाचे-> अपाचे मॉड्यूल-> स्क्रॉल करें और rewrite_module की जांच करें एक LoadModule rewrite_module पुनः आरंभ करें

ध्यान दें, "rewrite_module" सक्षम करने के बाद सर्वर एप्लिकेशन आपके लिए अपने आप पुनरारंभ हो जाता है


धन्यवाद एक बहुत, कल से इस मुद्दे को सुलझाने की कोशिश कर रहा है
Moe

2
ऐसा लगता है कि जब भी मैं किसी कंप्यूटर पर WAMP और Laravel को इनस्टॉल / रीइंस्टॉल करता हूँ, तो मेरे साथ ऐसा होता है। यह हमेशा मुद्दा है। उम्मीद है कि यह आखिरकार स्मृति के लिए प्रतिबद्ध होगा;)
केनमोर

Ubuntu 14.04 के तहत, 'sudo a2enmod rewrite' और फिर 'sudo service apache2 पुनरारंभ' काम किया।
nspo

लिनक्स सिस्टम के लिए sudo a2enmod rewriteपुनः आरंभ करने के बाद मॉड्यूल को फिर से लिखना सक्षम करेंsudo service apache2 restart
लक्ष्य

35

क्या आपने जांचने की कोशिश की है

http://localhost/mysite/public/index.php/user 

काम कर रहा था? यदि ऐसा है तो सुनिश्चित करें कि आपके सभी पथ के फ़ोल्डर में कोई अपरकेस अक्षर नहीं हैं। मेरे पास एक ही स्थिति थी और निचले मामले में पत्रों को परिवर्तित करने से मदद मिली।


धन्यवाद। मैं लारवेल पुस्तक (लारवेल स्टार्टर) के माध्यम से कदम से कदम मिलाकर चल रहा हूं और रूटिंग के साथ बंद हो गया है (पृष्ठ 13)। इससे मेरे लिए वह समस्या हल हो गई।
स्टीव लिंडसे

इससे मेरी समस्या हल हो गई। मेरे पास अपाचे फोल्डर की जड़ में एक .htaccess था जिसने लार्वा के htaccess को तोड़ दिया था।
Maarten00

इससे मेरी अन्य समस्या हल हो गई। api/branchesकाम करने के लिए कॉल पर विंडोज, पेजों को बनाने के लिए लारवेल का उपयोग करना, और एंगुलर का उपयोग करना , लेकिन लिनक्स पर, मुझे इस url को बदलना पड़ा जैसे: index.php/api/branchesकिसी भी तरह से इसे हल करने के लिए कोई भी तरीका?
miroslavign

मैंने कभी नहीं सोचा कि यह केस-सेंसिटिव है
क्लियरबोथ

इसके बजाय .htaccess फ़ाइल को सार्वजनिक / फ़ोल्डर से परियोजना की जड़ तक, फिर आप तक पहुँच सकते हैंhttp://localhost/mysite/user
रोहन खुदे

9

मुझे EasyPHP के उपयोग से समान समस्या हो रही थी। पाया कि मुझे AllowOverride Allअपने <Directory>ब्लॉक में निर्दिष्ट करना था httpd.conf। इसके बिना, अपाचे कभी-कभी आपकी उपेक्षा करता है .htaccess

मेरा अंत ऐसा लग रहा था ...

<Directory "D:/Dev">
    Options FollowSymLinks Indexes
    #### NEXT IS THE CRUCIAL LINE ####
    AllowOverride All                  
    Order deny,allow
    Allow from 127.0.0.1
    Deny from all
    Require all granted     
</Directory>

मैंने डेबियन जीएनयू / लिनक्स 7.6 पर पाया, कि इस प्रतिक्रिया ने एपाचे 2 (a2enmod rewrite) के लिए मॉड्यूल को सक्षम करने के अलावा, जो आवश्यक था, उसका हिस्सा दिया।
केविन बुचस

6

आप इसे स्थानांतरित root/public/.htaccessकरने की कोशिश कर सकते हैं root/.htaccessऔर इसे काम करना चाहिए


4
आपने 8 प्रश्नों का सटीक उत्तर दिया है। यदि आपको लगता है कि वे डुप्लिकेट हैं, तो आपको उन्हें इस तरह चिह्नित करना चाहिए और प्रत्येक को एक उत्तर नहीं देना चाहिए।
जाप

5

मार्गों

उन विशिष्ट मार्गों को परिभाषित करने के लिए उनका उपयोग करें जो नियंत्रकों द्वारा प्रबंधित नहीं किए जाते हैं।

नियंत्रकों

जब आप पारंपरिक MVC आर्किटेक्चर का उपयोग करना चाहते हैं तो उनका उपयोग करें

आपकी समस्या का समाधान

जब तक आप नियंत्रक क्रिया के लिए विशिष्ट 'नामित' मार्ग नहीं चाहते तब तक आप कंट्रोलर को रूट के रूप में पंजीकृत नहीं करते हैं।

अपने नियंत्रक कार्यों के लिए एक मार्ग बनाने के बजाय, बस अपने नियंत्रक को पंजीकृत करें:

Route::controller('user');

अब आपका नियंत्रक पंजीकृत हो गया है, आप नेविगेट कर सकते हैं http://localhost/mysite/public/userऔर आपका काम get_indexचलाया जाएगा।

आप सभी नियंत्रकों को एक बार में पंजीकृत कर सकते हैं:

Route::controller(Controller::detect());


3

ठीक है, इसलिए एक दिन के लिए इस समस्या पर मेरे सिर को कोसने के बाद ... मैंने उठकर वही किया जो मैंने कल किया था, और जो कुछ चल रहा था, उसे खत्म कर दिया!

लारवेल यहां क्या करने की कोशिश कर रहा है, index.phpएक रूट के रूप में दिए गए पथ के ठीक सामने फ़ाइल सम्मिलित है । उदाहरण के लिए, यदि आपने अपने ब्राउज़र पर Route::get('/account/create', ...,कहा से अपना ऐप निर्दिष्ट किया है और निष्पादित किया localhost/laravel/authenticate/public/account/createहै, तो लार्वेल निष्पादित करना चाहता है localhost/authenticate/public/index.php/account/create, लेकिन ऐसा करने के लिए .... अपाचे को यह देखने की आवश्यकता है कि /wamp/www/laravel/laravel/authentication/publicआपके मार्ग के माध्यम से अनुरोध कुछ हद तक भिन्न हो सकते हैं, जहां आपके लार्वा ऐप वास्तव में स्थापित है, लेकिन अनुगामी publicवह जगह है जहां प्रतिस्थापन की आवश्यकता होती है) में एक 'रीवेरिट्यूल' लागू होना चाहिए।

शुक्र है, लार्वा .htaccessआपके ऐप के publicफ़ोल्डर में एक आसान फ़ाइल में सही रीराइट नियम की आपूर्ति करता है । PROBLEM है, उस कोड में '.htaccess' फ़ाइल उस तरह से काम नहीं करेगी जिस तरह से WAMP बॉक्स से कॉन्फ़िगर किया गया है। इस SEEMS का कारण इस धागे के शीर्ष पर मुवेरा द्वारा सुझाई गई समस्या है - RewriteRuleसामान काम करने से पहले Apache_module कोड को Apache द्वारा लोड करना होगा। हेक यह समझ में आता है।

वह हिस्सा जो समझ में नहीं आता है: बस stoppingऔर restartingअपाचे सेवाएं WAMP के लिए आवश्यक बदलाव नहीं उठाएंगी, जो कि आपके RewriteRule के साथ सही काम करने के लिए है - मुझे पता है, मैंने कई बार यह कोशिश की थी!

क्या काम करता है: सही मॉड्यूल लोड करने के लिए मुवेरा (धागे के ऊपर देखें) द्वारा सुझाए गए बदलाव करें। फिर, अपने पूरे विंडोज सत्र को रीसेट करें, इस प्रकार अपाचे को मेमोरी से पूरी तरह से हटा दें। पुनः आरंभ (पुनः लोड) WAMP, और VOILA! ठीक काम करता है, सही रिटर्रूयूल लागू किया जाता है, यादा, यादा मैं बाद में खुशी से रह रहा हूं।

यह सब से बाहर अच्छी खबर यह है: मैं और अधिक के बारे में बहुत जानते हैं .htaccess, RewriteRuleऔर httpd.confफ़ाइलों अब। आपके ऐप की public .htaccessफ़ाइल से तर्क को स्थानांतरित करने के लिए एक अच्छा (प्रदर्शन) तर्क है , और इसे Directory ...अपने अपाचे 'बिन' फ़ोल्डर BTW में अपने httpd.conf के एक खंड में डाल दें (विशेषकर यदि आपके पास उस फ़ोल्डर तक पहुंच है)।


0

अपने php.ini में छोटे php टैग्स को सक्षम करने का प्रयास करें। WAMP ने उन्हें आम तौर पर बंद कर दिया है और लार्वा की जरूरत है।


रुको क्या? लारवेल को शॉर्ट टैग की आवश्यकता है?
बिशप

0
Route::get('/', function()
{
return View::make('home.index');
});

Route::get('user', function()
{
return View::make('user.index');
});

से ऊपर बदलें

Route::get('user', function()
{
return View::make('user.index');
});

Route::get('/', function()
{
return View::make('home.index');
});

आपको अपने मार्गों में अंत में '/' (घर / डिफ़ॉल्ट) का उपयोग करना होगा


0

आप Laravel 5 कमांड का उपयोग कर रहे होंगे

  class User_Controller extends Controller {
  public $restful = true;
  public function get_index(){
  return View('user.index');
  }
  }

और मार्गों में

  Route::get('/', function()
  {
  return view('home.index');
  });

  Route::get('user', function()
  {
  return view('user.index');
  });

दृश्य और नियंत्रक के लिए लारावेल 5 कमांड परिवर्तन प्रलेखन देखते हैं कि मैं पहले एक ही त्रुटि कर रहा था



0

मुझे लगता है कि आपने लार्वा सार्वजनिक फ़ोल्डर के अंदर डिफ़ॉल्ट .htaccess फ़ाइल को हटा दिया है। फ़ाइल अपलोड करें यह आपकी समस्या को ठीक करना चाहिए।


0

स्वचालित के साथ साधारण कमांड निर्भरता को लोड करता है

composer dump-autoload

और अभी भी हो रहा है कि आपकी कुछ महत्वपूर्ण फाइलें गायब हैं इसलिए पूरी प्रक्रिया देखने के लिए यहां जाएं

https://codingexpertise.blogspot.com/2018/11/laravel-new.html


0

यदि आप होमस्टेड के बावजूद वैग्रैंट का उपयोग कर रहे हैं, तो संभव है कि साझा फ़ोल्डर को माउंट करने में कोई त्रुटि हो। ऐसा लगता है कि वैग्रैंट आपकी फ़ाइलों को उस फ़ोल्डर से लेता है और उन फ़ाइलों को स्वैप करता है जो वास्तव में बूट मशीन पर होस्ट मशीन पर होती हैं, इसलिए यदि कोई त्रुटि थी, तो आप अनिवार्य रूप से आपके लारवेल इंस्टॉलेशन तक पहुंचने की कोशिश कर रहे हैं जब आपने इसे पहली बार बनाया था (जो यही कारण है कि आप केवल "घर" प्राप्त कर रहे हैं - जो स्थापना के दौरान उत्पन्न हुआ था)।

आप इसे आसानी से अपने vm में sshing और मार्गों / web.php फ़ाइल की जाँच करके देख सकते हैं कि क्या यह वास्तव में आपकी फ़ाइल है। यदि ऐसा नहीं है, बाहर से बाहर निकलें और vagrant halt, vagrant up, और बूट पर त्रुटियों के लिए देखो।


0
  1. सेटअप .env फ़ाइल
  2. कॉन्फ़िगर index.html
  3. सुनिश्चित करें कि आपके पास है .htaccess
  4. sudo service apache2 restart

शायद यह कैश समस्याओं के कारण है


0

काम नहीं कर रहा है की मुख्य समस्या वहाँ macos में mod_rewrite.so मॉड्यूल है, लिनक्स अपाचे विन्यास की httpd.conf फ़ाइल में सक्षम नहीं है, तो काम करने के लिए .htaccess कर सकते हैं। मैंने इसे लाइन को अनफॉलो करके हल किया है:

# LoadModule rewrite_module libexec/apache2/mod_rewrite.so

की #लाइन से ऊपर निकालें httpdf.conf। तब यह काम करेगा।
का आनंद लें!

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.