Laravel 5 - URL से सार्वजनिक निकालें


241

मुझे पता है कि यह एक बहुत ही लोकप्रिय प्रश्न है, लेकिन मैं लारवेल 5 के लिए एक काम करने वाला समाधान नहीं ढूंढ पाया हूं। मैं लंबे समय से कोडिग्नेटर से माइग्रेट करने की कोशिश कर रहा था, लेकिन यह जटिल स्थापना प्रक्रिया मुझे दूर रखती है।

मैं एक VM चलाना नहीं चाहता, यह सिर्फ अजीब लगता है जब परियोजनाओं के बीच स्विच करता है।

मैं अपने दस्तावेज़ रूट को सार्वजनिक फ़ोल्डर में सेट नहीं करना चाहता, परियोजनाओं के बीच स्विच करते समय यह भी अजीब है।

मैंने .htaccess mod_rewrite विधि की कोशिश की है

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteRule ^(.*)$ public/$1 [L]
</IfModule>

यह बस मुझे एक Laravel NotFoundHttpException संकलित .php लाइन 7610 में देता है।

जब मैंने कुछ समय पहले L4 की कोशिश की थी, तो मैंने सार्वजनिक फ़ोल्डर की सामग्री को रूट में ले जाने की विधि का उपयोग किया था। L5 की संरचना काफी अलग है और समान चरणों का पालन करने से Laravel पूरी तरह से टूट गया (सर्वर केवल एक खाली पृष्ठ लौटाएगा)।

क्या विकास के माहौल में 'जनता' को हटाने का एक अच्छा तरीका है:

  1. L5 के साथ काम करता है
  2. मुझे आसानी से परियोजनाओं के बीच स्विच करने की अनुमति देता है (मैं आमतौर पर किसी एक समय में 2 या 3 पर काम कर रहा हूं)।

धन्यवाद

** मैं MAMP और PHP 5.6.2 का उपयोग कर रहा हूं


1
गाइड में फ़ोल्डर की संरचना मेरे लिए अलग है, मुझे लगता है कि वह एल 5 का उपयोग नहीं कर रहा है? मैंने बूटस्ट्रैप / पथ फ़ाइल में किए गए परिवर्तनों को छोड़ दिया, क्योंकि यह मौजूद नहीं है। हालांकि यह परियोजना काम कर रही है। क्या आपको लगता है कि यह ठीक है?
user1537360

मेरी गलती ने मुझे L5
kamlesh.bar

उसी के लिए कोई सफलता की कोशिश नहीं कर रहा है
kamlesh.bar

1
यह सिर्फ index.php फ़ाइल में पथों को संशोधित करके काम करने लगता है, लेकिन मैं Laravel के लिए नया हूं इसलिए स्पष्ट रूप से इस पर टिप्पणी नहीं कर सकता कि क्या यह स्थिर / सुरक्षित है।
user1537360

अन्य फ़ोल्डर / फ़ाइलें आपके दस्तावेज़ रूट के नीचे होने चाहिए।
18

जवाबों:


431

लारवेल 5 के लिए:

  1. server.phpअपने Laravel रूट फ़ोल्डर में नाम बदलेंindex.php
  2. कॉपी .htaccessसे फाइल /publicअपने Laravel रूट फ़ोल्डर के लिए निर्देशिका।

बस!


105
व्हाट्सएप इस तरह असुरक्षित हो सकता है, सुनिश्चित करें कि कोई भी आपकी .envफ़ाइल का अनुरोध नहीं कर सकता है यदि आप ऐसा कर रहे हैं जब तक कि आप स्पष्ट डेटाबेस में अपना डेटाबेस पासवर्ड देखने वाले लोगों के साथ ठीक नहीं हैं;)
गैबेलरॉक्स

48
यह काम नहीं करेगा यदि आप अपनी संपत्ति को रूट से रिश्तेदार पथ का उपयोग कर संदर्भित कर रहे हैं। "" aassets/styles.css "इत्यादि। मैं अभी भी इसे सर्वर पर तैनात करने के लिए सबसे अच्छा तरीका खोजने के साथ संघर्ष कर रहा हूं
ग़ज़फ़र मीर

1
यह काम करता है ... लेकिन क्या इसका उपयोग करने में कोई परिणाम / नुकसान है? कई वर्चुअल होस्ट स्थापित करने, या मैन्युअल रूप से फ़ाइलों की प्रतिलिपि बनाने आदि का सुझाव दे रहे हैं ... क्या यह उत्पादन में भी काम करता है?
बोगज

1
@GabLeRoux <Files "log.txt">Order Allow,DenyDeny from all</Files>आपके द्वारा संबोधित समस्या का समाधान करता है। क्या यह अब सुरक्षित है या कोई और जोखिम है?
तितली 7

1
@Butterflyit आपके सर्वर कॉन्फिगर पर निर्भर करता है। उपरोक्त केवल ब्लॉक करेगा log.txt। बस यह सुनिश्चित करें कि आप जनता से संवेदनशील डेटा को ब्लॉक करें। यदि आप लारवेल का उपयोग करते हैं और प्रलेखन को ध्यान से पढ़ते हैं , तो आपका वेबरूट जैसा दिखेगा project/publicइस stackoverflow चर्चा क्यूए के लिए एक नज़र है । अपने वेबसर्वर को सेट करें और https://example.com/.envकेवल मामले में प्रयास करें । यदि आप अपने पासवर्ड देखते हैं, तो सभी चीज़ों पर विचार करें और सभी पासवर्ड बदलें।
गैबलरॉक्स

126

मैंने 2 उत्तरों का उपयोग करके समस्या हल की है:

  1. Server.php को index.php में बदलना (कोई संशोधन नहीं)
  2. पब्लिक फोल्डर से रूट फोल्डर में .htaccess कॉपी करें (जैसे rimon.ekjon ने नीचे कहा)
  3. इसे बदलना। स्टैटिक्स के लिए इसे इस प्रकार थोड़ा-सा बदल दें:

    RewriteEngine On
    
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)/$ /$1 [L,R=301]
    
    RewriteCond %{REQUEST_URI} !(\.css|\.js|\.png|\.jpg|\.gif|robots\.txt)$ [NC]
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
    
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_URI} !^/public/
    RewriteRule ^(css|js|images)/(.*)$ public/$1/$2 [L,NC]

    अगर कोई अन्य स्टैटिक फाइल की जरूरत है तो एक्सटेंशन को पिछली घोषित सूची में जोड़ें


1
हैलो @KA_lin। मैं किसी को देखने से कैसे रोक सकता हूँ। इसलिए मुझे लोकलहोस्ट / oap / .env पसंद है
Fokwa Best

8
RewriteRule ^.env - [F,L,NC]
हम्मम

2
या <Files ~ "\.env$"> Order allow,deny Deny from all </Files>
ka_lin

बहुत बहुत धन्यवाद @ka_lin, क्या इसके बाद / सार्वजनिक / के माध्यम से पहुंच को हटाने का कोई तरीका है? जैसे www.yoursite.com काम करता है, लेकिन www.yoursite.com/public भी काम करता है, क्या पिछले को हटाना संभव है?
अडाबा

8
यह काम कर रहा है लेकिन css, js और चित्र लोड नहीं हो रहे हैं
चेतन खंडला

94

Laravel 5.5 में अपनी रूट डायरेक्टरी में .htacess फ़ाइल बनाएं और निम्नलिखित कोड रखें: - संदर्भ लिंक

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews
    </IfModule>

    RewriteEngine On

    RewriteCond %{REQUEST_FILENAME} -d [OR]
    RewriteCond %{REQUEST_FILENAME} -f
    RewriteRule ^ ^$1 [N]

    RewriteCond %{REQUEST_URI} (\.\w+$) [NC]
    RewriteRule ^(.*)$ public/$1 

    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ server.php

</IfModule>

5
सबसे अच्छा जवाब! मेरे उदाहरण में एक ही काम किया, यह निश्चित रूप से अधिक वोट होना चाहिए
फीलुसबोनैचि

धन्यवाद यह मेरे लिए काम है। लेकिन मैं जानना चाहता हूं कि इसका कोई सुरक्षा मुद्दा है या नहीं।
रहुल सिंह चौहान

@rahulsinghChauhan मेरी खुशी। मुझे सुरक्षा के मुद्दे के बारे में पता नहीं है, लेकिन यह सुरक्षित होना चाहिए।
रहम

2
यह नियम RewriteRule ^ ^$1 [N] क्या करता है?
गोंजो

मेरे लिए यही एक काम है ... बहुत बहुत धन्यवाद
अरशद अमीन

86

ऐसा नहीं!

आप वास्तवserver.php में अपने Laravel रूट फ़ोल्डर में नाम बदलना नहीं चाहिएindex.php और निर्देशिका .htaccessसे फ़ाइल /publicको अपने Laravel रूट फ़ोल्डर में कॉपी करें !!!

इस तरह हर कोई आपकी कुछ फाइलों तक पहुँच सकता है ( .envउदाहरण के लिए)। इसे स्वयं आज़माएं। आप ऐसा नहीं चाहते हैं!


करना

इसके बजाय, आपको .htaccessअपनी रूट में इस तरह से एक फाइल बनानी चाहिए :

RewriteEngine On
RewriteCond %{REQUEST_URI} !^/public/
RewriteRule ^(.*)$ /public/$1 [L,QSA]

यह आपके सभी आधार URI को /publicफ़ोल्डर में चुपचाप फिर से लिख देगा । यहां तक ​​कि सभी हेडर , उदाहरण के लिए HTTP ऑथराइजेशन हैडर , और सभी वैकल्पिक यूआरआई पैरामीटर चुपचाप /publicफ़ोल्डर में भी पारित किए जाएंगे ।

बस इतना ही

कृपया ध्यान दें कि डॉकर के साथ लारवेल प्रोजेक्ट स्थापित करते समय: आपको ऐसा करने की आवश्यकता नहीं होगी।


2
यह उत्पादन में ठीक काम कर रहा है लेकिन यह स्थानीय किसी भी सुझाव में काम नहीं कर रहा है?
हरितसिंह गोहिल

2
यह पूरी तरह से काम कर रहा है! स्थानीय और सर्वर सुरक्षा मदद के लिए धन्यवाद!
घनश्याम नकिया

1
नमस्कार, @DerkJanSpeelman मैं अपनी होस्टिंग में एक सबफ़ोल्डर के अंदर अपनी लार्वा फ़ाइलों को अपलोड करने का प्रयास कर रहा हूं जैसे: (example.com/projects/laravel/blog) उस मामले में, आगंतुकों को example.com/projects-laravel/blog/ पर जाना होगा सार्वजनिक, ताकि मैं आपके कोड के साथ एक .htaccess फ़ाइल को ब्लॉग फ़ोल्डर रूट में रखूं और इसे सार्वजनिक फ़ोल्डर पर पुनर्निर्देशित करना चाहता हूं। लेकिन यह काम नहीं कर रहा है। यहाँ त्रुटि हो रही है: अनुरोधित URL / सार्वजनिक / इस सर्वर पर नहीं मिला था। इसे कैसे हल किया जा सकता है ?
शोवन दास

1
यह उत्तर रेखांकित है। बोल्ड के लिए अपवोट किया गया और हाइलाइट न करें। यह बिल्कुल ठीक काम कर रहा है।
वरुण वेद


43

लार्वा 5 यूआरएल से जनता को हटाने का आसान तरीका। आपको बस सार्वजनिक निर्देशिका से index.php और .htaccess को काटने और इसे रूट निर्देशिका में पेस्ट करने की आवश्यकता है, सभी को thats और दो लाइनों को index.php में बदल दें

require __DIR__.'/bootstrap/autoload.php';
$app = require_once __DIR__.'/bootstrap/app.php';

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


1
उसके बाद सीएसएस लोड नहीं, bcoz सभी सीएसएस सार्वजनिक हैं और जनता को url से हटा दिया गया है
श्री तोमर

1
आप लोड करते समय js या css फ़ाइलों से पहले "सार्वजनिक /" रख सकते हैं, जैसे Html :: script ("सार्वजनिक / js / ....."); - लेकिन सबसे अच्छा समाधान आभासी मेजबान होगा ...
मुहम्मद सादिक

39

@ rimon.ekjon ने कहा:

अपने Laravel रूट फ़ोल्डर में server.php का नाम बदलकर index.php करें और अपने Laravel रूट फ़ोल्डर में .htaccess फ़ाइल को / सार्वजनिक निर्देशिका से कॉपी करें। -- बस !! :)

वह मेरे लिए काम कर रहा है। लेकिन / पब्लिक डायरेक्टरी में सभी रिसोर्स फाइल्स नहीं मिल सकीं और आग्रह का अनुरोध नहीं हुआ, क्योंकि मैंने एसेट () हेल्पर का इस्तेमाल किया।

मैंने /Illuminate/Foundation/helpers.php/asset () फ़ंक्शन निम्नानुसार बदला:

function asset($path, $secure = null)
{
    return app('url')->asset("public/".$path, $secure);
}

अब सब कुछ काम करता है :)

धन्यवाद @ rimon.ekjon और आप सभी का।


3
यह इस समस्या को हल करने का एक अच्छा तरीका नहीं है, जैसा कि आप विक्रेताओं की निर्देशिका में अपडेट करने का प्रयास कर रहे हैं जो अच्छा अभ्यास नहीं है।
शादमान

1
आपको केवल RewriteRule ^(.*)$ public/$1 [L]अपनी .htaccess फ़ाइल में जोड़ने की आवश्यकता है जिसे आपने सार्वजनिक निर्देशिका से कॉपी किया है, इस लाइन को हटाकरRewriteRule ^(.*)/$ /$1 [L,R=301]
Shadman

29

बस रूट पर .htaccess फ़ाइल बनाएं और उसमें इन पंक्तियों को जोड़ें

<IfModule mod_rewrite.c>
    RewriteEngine On

    RewriteRule ^(.*)$ public/$1 [L]
</IfModule>

बस!

उपरोक्त कोड रूट public_html फोल्डर पर काम करता है। अगर आपकी निर्देशिका public_html / laravelapp / public की तरह दिखती है और यदि आप उपरोक्त कोड लार्वावेलप के अंदर रखते हैं, तो यह काम नहीं करेगा। इसलिए आपको अपनी सभी कोर फ़ाइलों को public_html में कॉपी करना होगा और .htaccess फ़ाइल को वहाँ रखना होगा।

यदि आप कोड को एक उपनिर्देशिका में रखना चाहते हैं तो आप एक उपडोमेन बना सकते हैं तो यह कोड उसके लिए भी काम करेगा।


मैंने आपका उत्तर पढ़ने से पहले नीचे उत्तर दिया और यह स्वीकृत उत्तर होना चाहिए। कोई फ़ाइल परिवर्तन नहीं: बस एक सरल, चतुर नियम।
ब्रिगो

@ राम आपका वर्तमान यूआरएल क्या है?
अभिनव सारस्वत

2
बस इस सज्जन के काम के शीर्ष पर एक संक्षिप्त विवरण जोड़ना चाहते हैं। उपरोक्त कोड रूट public_html फोल्डर पर काम करता है (मेरे पास मुद्दे भी थे)। यह कहने के बाद कि आपकी मुख्य लार्वा फाइल सार्वजनिक_एचटीएमएल फ़ोल्डर के अंदर होनी चाहिए, मैंने गलती की कि मेरी निर्देशिका public_html / laravelapp / public की तरह दिखती है यदि आप उपरोक्त कोड को लार्वावेलप के अंदर रखते हैं तो यह काम नहीं करेगा। इसलिए आपको अपनी सभी कोर फ़ाइलों को public_html में कॉपी करना होगा और .htaccess फ़ाइल को वहाँ रखना होगा। सेंटो के लिए संदर्भित करना और लार्वा के लिए कोपनल होस्टिंग।
दीपेश थापा

इस पद्धति का उपयोग करने में क्या खामियां हैं?
स्क्रिप्ट 47

1
मेरे लिए एक आकर्षण की तरह काम किया, मेरे पास केवल cPanel webshost था और Apache के लिए रूटडायरेक्ट्री को बदल नहीं सका। धन्यवाद ! सबसे सरल और सुरक्षित। यह आपके रूट फ़ोल्डर की सामग्री को देखने की अनुमति नहीं देगा
विन्सेन्ट डेक्सक्स

27

रूट डायरेक्टरी .htaccessमें फाइल बनाएं और कोड को नीचे की तरह रखें।

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews
    </IfModule>

    RewriteEngine On

    RewriteCond %{REQUEST_FILENAME} -d [OR]
    RewriteCond %{REQUEST_FILENAME} -f
    RewriteRule ^ ^$1 [N]

    RewriteCond %{REQUEST_URI} (\.\w+$) [NC]
    RewriteRule ^(.*)$ public/$1 

    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ server.php
</IfModule>

1
मैं वास्तव में इस समाधान की सलाह देता हूं।
TheLastCodeBender

1
मैं इस समाधान की भी सलाह देता हूं
iglesiasedd

बहुत बहुत धन्यवाद। यह सही है (y)
प्रप्पो इस्लाम प्रिंस

3
यह ठीक काम कर रहा है, लेकिन फिर भी .env फ़ाइल सीधे URL से सुलभ है।
मनोज सिंह

क्या यह एक सुरक्षित उपाय है?
सीनियर पीएचपी प्रोग्रामर टीम लीड

23

1) मुझे L5 में सार्वजनिक निर्देशिका को स्थानांतरित करने के लिए एक कार्य विधि नहीं मिली है । जबकि आप बूटस्ट्रैप में कुछ चीजों को संशोधित कर सकते हैंindex.php , तो ऐसा प्रतीत होता है कि कई सहायक कार्य उस सार्वजनिक निर्देशिका की धारणा पर आधारित हैं। सभी ईमानदारी से आप वास्तव में सार्वजनिक निर्देशिका को स्थानांतरित नहीं करना चाहिए।

2) यदि आपका MAMP का उपयोग कर रहा है, तो आपको प्रत्येक प्रोजेक्ट के लिए नई vhosts बनानी चाहिए, प्रत्येक जो सार्वजनिक निर्देशिका को प्रोजेक्ट करती है। एक बार जब आप अपने प्रोजेक्ट को अपने परिभाषित सर्वर नाम से इस तरह एक्सेस करते हैं:

http://project1.dev
http://project2.dev

15

लार्वा 5 में सार्वजनिक url निकालना संभव है । इन कदमों का अनुसरण करें:

से सभी फाइल 1.Copy कदम सार्वजनिक और पर चस्पा जड़ निर्देशिका

चरण 2.open index.phpफ़ाइल के साथ बदलें

 require __DIR__.'/../bootstrap/autoload.php';

सेवा

 require __DIR__.'/bootstrap/autoload.php';

तथा

$app = require_once __DIR__.'/../bootstrap/app.php';

सेवा

$app = require_once __DIR__.'/bootstrap/app.php';

और सभी कैश और कुकीज़ को हटा दें।


नमस्ते, मैंने आपकी विधि की कोशिश की है, उपरोक्त चरणों का प्रदर्शन किया है, लेकिन यह निम्नलिखित त्रुटियों को दर्शाता है: चेतावनी: आवश्यकता_ऑनसे (D: \ Projects \ laravel / public / index.php): स्ट्रीम खोलने में विफल: D में ऐसी कोई फ़ाइल या निर्देशिका नहीं: लाइन 21 प्रोजेक्ट्स में \ प्रोजेक्ट \ लारवेल \ सर्वर। घातक त्रुटि: आवश्यकता_ऑनस (): आवश्यक ओपनिंग 'डी: \ प्रोजेक्ट \ लार्वेल / पब्लिक / इंडेक्स। एफपीपी (शामिल_पथ ='।)। सी: \ xampp \ php \ PEAR '; ) D: \ Projects \ laravel \ server.php लाइन 21 पर
अली शहजाद

यह एक सही जवाब नहीं है, बल्कि यह एक बहुत ही असुरक्षित तरीका है।
रोहित

11

मान लें कि आपने अन्य सभी फ़ाइलों और निर्देशिकाओं को 'लोकेल' नामक फ़ोल्डर में रखा है।

यहां छवि विवरण दर्ज करें

बस index.php पर जाएं और इन दो लाइनों को खोजें:

require __DIR__.'/../bootstrap/autoload.php';

$app = require_once __DIR__.'/../bootstrap/app.php';

और उन्हें इस में बदलें:

require __DIR__.'/locale/bootstrap/autoload.php';

$app = require_once __DIR__.'/locale/bootstrap/app.php';

11

यहाँ सबसे अच्छा और सबसे छोटा समाधान है जो मेरे लिए 2018 के लिए काम करता है , लारवेल 5.5 के लिए

  1. बस / सार्वजनिक निर्देशिका .htaccessसे अपनी फ़ाइल को रूट निर्देशिका में काटें और इसे निम्नलिखित कोड से सामग्री को बदलें:

    <IfModule mod_rewrite.c>
        <IfModule mod_negotiation.c>
           Options -MultiViews
        </IfModule>
    
        RewriteEngine On
    
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteRule ^(.*)/$ /$1 [L,R=301]
    
        RewriteCond %{REQUEST_URI} !(\.css|\.js|\.png|\.jpg|\.gif|robots\.txt)$ [NC]
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteRule ^ server.php [L]
    
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteCond %{REQUEST_URI} !^/public/
        RewriteRule ^(css|js|images)/(.*)$ public/$1/$2 [L,NC]
    </IfModule>
  2. बस .htaccessफ़ाइल को बचाओ और वह सब है।

  3. अपनी server.phpफ़ाइल का नाम बदलें index.php। यह सब आनंद है!


9

सबसे अच्छा तरीका: मैं सार्वजनिक हटाने, बजाय का सुझाव नहीं देंगे on local computer create a virtual host point to public directoryऔर on remote hosting change public to public_html and point your domain to this directory। कारण, आपका पूरा लार्वा कोड सुरक्षित रहेगा क्योंकि इसका एक स्तर आपकी सार्वजनिक निर्देशिका के नीचे है :)

विधि 1:

मैं सिर्फ नाम बदलने server.phpके लिए index.phpऔर यह काम करता

विधि 2:

सभी लार्वा संस्करण के लिए यह अच्छी तरह से काम ...

यहाँ मेरी निर्देशिका संरचना है,

/laravel/
... app
... bootstrap
... public
... etc

इन आसान चरणों का पालन करें

  1. सार्वजनिक निर्देशिका से सभी फ़ाइलों को रूट / लार्वेल / में स्थानांतरित करें
  2. अब, सार्वजनिक निर्देशिका की कोई आवश्यकता नहीं है, इसलिए वैकल्पिक रूप से आप इसे अब हटा सकते हैं
  3. अब index.php खोलें और निम्नलिखित प्रतिस्थापन करें

डीआईआर की आवश्यकता होती है । '/ .. / बूटस्ट्रैप / ऑटोलैड. एफपी';

सेवा

डीआईआर की आवश्यकता होती है । '/ बूटस्ट्रैप / ऑटोलैड. एफपी';

तथा

$ app = आवश्यकता_संचालित DIR । '/ .. / बूटस्ट्रैप / start.php';

सेवा

$ ऐप = आवश्यकता_ऑन डीआईआर । '/ बूटस्ट्रैप / स्टार्ट. एफपी';

  1. अब बूटस्ट्रैप / पाथसेफ़ खोलें और सार्वजनिक निर्देशिका पथ बदलें:

'जनता' => DIR । '/ .. / सार्वजनिक'

सेवा

'जनता' => DIR । '/ ..'

और यह बात है, अब http: // localhost / laravel / आज़माएं


इसके लिए सब कुछ ठीक है। लेकिन कारीगर कमांड काम नहीं कर रहा है, बस यह दिखाता है कि "इनपुट फ़ाइल नहीं खोल सकता: कारीगर"। क्या कोई सुझाव है?
कबीर हुसैन

इस विधि ने काम किया, यदि आप उपयोगकर्ताओं के लिए अपने डेटाबेस क्रेडेंशियल को उजागर करने के लिए ठीक हैं। लोकलहोस्ट / लार्वेल / .env
मसूदर्रहमान

8

URL से सार्वजनिक हटाने के 4 सर्वश्रेष्ठ तरीके।

यदि आपने URL से जनता को निकालने के लिए किसी अन्य ट्रिक का उपयोग किया है जैसे कि server.php का नाम index.php में बदलना और कोर फ़ाइल पथ में बदलना। जाहिर है, ऐसा मत करो। तब लारवेल ने इस तरह से समाधान क्यों नहीं दिया क्योंकि यह ऐसा करने का उचित तरीका नहीं है।

1) Laravel में htaccess का उपयोग करके URL से सार्वजनिक निकालें

.Htaccess फ़ाइल को रूट में जोड़कर, आप वेबसाइट को बिना सार्वजनिक किए एक्सेस कर सकते हैं

<ifmodule mod_rewrite.c>
    <ifmodule mod_negotiation.c>
        Options -MultiViews
    </ifmodule>

    RewriteEngine On

    RewriteCond %{REQUEST_FILENAME} -d [OR]
    RewriteCond %{REQUEST_FILENAME} -f
    RewriteRule ^ ^$1 [N]

    RewriteCond %{REQUEST_URI} (\.\w+$) [NC]
    RewriteRule ^(.*)$ public/$1 

    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ server.php

</ifmodule>

2) अपने स्थानीय में एक वर्चुअल होस्ट बनाकर जनता को हटा दें

मैं यहाँ विंडो ऑपरेटिंग सिस्टम के लिए डेमो दे रहा हूँ। लेकिन मैं एक कदम को परिभाषित करने की कोशिश करूंगा ताकि कोई भी आसानी से कदम का पालन कर सके। आप विशेष ऑपरेटिंग सिस्टम के लिए भी Google पर शोध कर सकते हैं।

चरण 1: C: \ Windows \ system32 \ driver \ etc \ पर जाएं, व्यवस्थापक मोड में "होस्ट" फ़ाइल खोलें।

चरण 2: इसमें निम्न कोड जोड़ें। यहाँ, मैं आपको projectname.local डोमेन नाम का डेमो दे रहा हूँ, आप अपनी इच्छानुसार कोई भी निर्दिष्ट कर सकते हैं। बस इसे हर स्थान पर स्थिर बनायें।

127.0.0.1  projectname.local

चरण 3: अब C:\xampp\apache\conf\extraxampp उपयोगकर्ताओं के लिए और wamp उपयोगकर्ता के लिए "C:\wamp\bin\apache\Apache2.4.4\conf\extra"और "httpd-vhosts.conf"फ़ाइल खोलें पर जाएँ । अब इसमें निम्न कोड जोड़ें।

नोट्स: अपनी परियोजना के अनुसार दस्तावेज़ रूट को बदलें भी डोमेन नाम जोड़ें जैसा कि आप "होस्ट" फ़ाइल में परिभाषित करते हैं।

<VirtualHost projectname.local>
      ServerAdmin projectname.local
      DocumentRoot "C:/xampp/htdocs/projectdir"
      ServerName projectname.local
      ErrorLog "logs/projectname.local.log"
      CustomLog "logs/projectname.local.log" common
 </VirtualHost>

चरण 4: अंतिम लेकिन महत्वपूर्ण कदम यह है कि आप अपने Xampp या Wamp को पुनः आरंभ करें और url को एक्सेस करें http://projectname.localऔर आपका Laravel बिना सार्वजनिक URL के उत्तर देगा।


3) लारवेल में कमांड चलाकर जनता को हटा दें

यदि आप लोकल में काम कर रहे हैं तो आपको अपने टर्मिनल या कमांड लाइन टूल से निम्न कमांड को चलाने की आवश्यकता नहीं है। उसके बाद, आप कमांड लाइन द्वारा URL प्रदान करके अपनी वेबसाइट तक पहुँच सकते हैं।

   > php artisan serve

यदि आप विशेष रूप से आईपी पर अपनी परियोजना चलाने के लिए तैयार हैं, तो आपको निम्नलिखित कमांड चलाने की आवश्यकता है। यदि आप LAN पर काम कर रहे हैं, तो यदि आप अन्य लोगों को अपनी वेबसाइट को स्थानीय से एक्सेस करने की अनुमति देना चाहते हैं, तो आपको कमांड के बाद अपना आईपी पता चलाने के बाद "ipconfig" चलाकर कमांड लाइन का उपयोग करके अपने आईपी पते की जांच करनी होगी।

> php artisan serve --host=192.168.0.177

यदि आप किसी विशेष पोर्ट के साथ एक विशेष आईपी पर अपनी परियोजना को चलाने के लिए तैयार हैं, तो आपको निम्न कमांड की आवश्यकता है।

> php artisan serve --host=192.168.0.177 --port=77

4) होस्ट किए गए सर्वर या cpanel पर जनता को हटा दें

यहां छवि विवरण दर्ज करें

परियोजना के पूरा होने के बाद आपको सर्वर पर प्रोजेक्ट को होस्ट करने की आवश्यकता है, फिर आपको अपने डोमेन पर दस्तावेज़ रूट को सार्वजनिक फ़ोल्डर में सेट करने की आवश्यकता है। नीचे दिए गए स्क्रीनशॉट की जाँच करें।

स्क्रीनशॉट के अनुसार यदि आपके पास public_html में कोई प्रोजेक्ट फ़ोल्डर नहीं है, तो आपको बस अपना दस्तावेज़ रूट सेट करना होगा "public_html/public"

संदर्भ यहाँ से लिया गया


1
सभी चार तरीके अच्छे हैं, लेकिन मैंने पहले समाधान का उपयोग करके अपनी समस्या को हल किया है।
मनीषा

7

मैं @Humble शिक्षार्थी को जोड़ना चाहूंगा और ध्यान दूंगा कि संपत्तियों के लिए url पथ को "ठीक" करने के लिए उचित स्थान /Illuminate/Rout/UrlGenerator.php/asset () है।

मिलान करने की विधि अपडेट करें:

public function asset($path, $secure = null)
{
    if ($this->isValidUrl($path)) return $path;
    $root = $this->getRootUrl($this->getScheme($secure));
    return $this->removeIndex($root).'/public/'.trim($path, '/');
}

यह स्क्रिप्ट, शैली और छवि पथ को ठीक करेगा। संपत्ति पथ के लिए कुछ भी।


6

लार्वा डिफ़ॉल्ट डिफ़ॉल्ट सिस्टम को छूने के बिना सार्वजनिक रूप से यूआरएल से हटाने के लिए XAMPP उपयोगकर्ता के लिए यह कदम इन चरणों का पालन करने के लिए अपने आवेदन के लिए एक वर्चुअल होस्ट सेट करना है

  1. XAMPP कंट्रोल पैनल एप्लिकेशन खोलें और Apache को रोकें। ध्यान रखें कि देर से विंडोज मशीनें इसे एक सेवा के रूप में चला सकती हैं, इसलिए अपाचे मॉड्यूल के बाईं ओर स्थित बॉक्स को चेक करें।

  2. C:/xampp/apache/conf/extraअपने XAMPP फ़ाइलों को या जहाँ भी स्थित हो, पर नेविगेट करें ।

  3. एक पाठ संपादक के साथ httpd-vhosts.conf नाम की फ़ाइल खोलें।

  4. लाइन 19 के आसपास # NameVirtualHost *:80और असुविधाजनक लगता है या हैश को हटा दें।

  5. फ़ाइल के बहुत नीचे दिए गए कोड को चिपकाएँ:

<VirtualHost *>
    ServerAdmin admin@localhost.com
    DocumentRoot "C:/xampp/htdocs" # change this line with your htdocs folder
    ServerName localhost
    ServerAlias localhost
    <Directory "C:/xampp/htdocs">
        Options Indexes FollowSymLinks Includes ExecCGI
        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>
  1. अब आप अपने वर्चुअल होस्ट निर्देशिकाओं को जोड़ने के लिए नीचे दिए गए कोड को कॉपी और पेस्ट कर सकते हैं। उदाहरण के लिए मैं Eatery Engine नामक साइट पर काम कर रहा हूं, इसलिए निम्नलिखित स्निपेट मुझे अपने स्थानीय सेट पर उप-डोमेन के साथ काम करने की अनुमति देगा:
<VirtualHost eateryengine.dev>
    ServerAdmin admin@localhost.com
    DocumentRoot "C:/xampp/htdocs/eateryengine" # change this line with your htdocs folder
    ServerName eateryengine.dev
    ServerAlias eateryengine.dev
    <Directory "C:/xampp/htdocs/eateryengine">
        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>
  1. अपने HOSTS को संपादित करने के लिए अपनी Windows होस्ट फ़ाइल के आगे अगला सिर। फ़ाइल पर स्थित होगाC:/Windows/System32/drivers/etc/hosts , जहाँ होस्ट फ़ाइल है। इसे नोटपैड के साथ खोलें।
  2. DNS के भीतर ही #localhost नाम रिज़ॉल्यूशन देखें।

127.0.0.1 localhost

लोकलहोस्ट नाम रिज़ॉल्यूशन DNS के भीतर ही संभाला जाता है।

127.0.0.1       localhost
127.0.0.1       eateryengine.dev #change to match your Virtual Host.
127.0.0.1       demo.eateryengine.dev #manually add new sub-domains.
  1. अपाचे को पुनरारंभ करें और सब कुछ परीक्षण करें।

मूल लेख यहां पाया जा सकता है


5

Laravel सेटअप में सार्वजनिक फ़ोल्डर होने का हमेशा एक कारण होता है, सभी सार्वजनिक संबंधित सामान सार्वजनिक फ़ोल्डर के अंदर मौजूद होना चाहिए,

Laravel के रूट फ़ोल्डर में अपने आईपी पते / डोमेन को इंगित न करें लेकिन इसे सार्वजनिक फ़ोल्डर में इंगित करें। यह रूट फ़ोल्डर में सर्वर आईपी को इंगित करने के लिए असुरक्षित है। क्योंकि जब तक आप प्रतिबंध नहीं लिखते हैं, तब .htaccessतक कोई अन्य फ़ाइलों तक आसानी से पहुंच सकता है।

बस .htaccessफ़ाइल में पुनर्लेखन की स्थिति लिखें और पुन: लिखने वाले मॉड्यूल स्थापित करें और पुन: लिखने वाले मॉड्यूल को सक्षम करें, मार्ग में जनता को जोड़ने वाली समस्या हल हो जाएगी।


3

मुझे पता है कि इस मुद्दे के लिए बहुत सारे समाधान हैं। सबसे अच्छा और आसान समाधान रूट डायरेक्टरी में .htaccess फाइल को जोड़ना है ।

मैंने उन उत्तरों की कोशिश की जो हमने इस मुद्दे के लिए प्रदान किए थे लेकिन मुझे कुछ मुद्दों का सामना करना पड़ा: लारवेल में एपीआई गार्ड।

यहाँ अद्यतन समाधान है:

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews
    </IfModule>

    RewriteEngine On
    RewriteCond %{HTTP:Authorization} ^(.*)
    RewriteRule .* - [e=HTTP_AUTHORIZATION:%1]

    RewriteCond %{REQUEST_FILENAME} -d [OR]
    RewriteCond %{REQUEST_FILENAME} -f
    RewriteRule ^ ^$1 [N]

    RewriteCond %{REQUEST_URI} (\.\w+$) [NC]
    RewriteRule ^(.*)$ public/$1

    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ server.php
</IfModule>

अपनी रूट डायरेक्टरी में .htaccess फाइल बनाएं और इस कोड को जोड़ें। और सब कुछ सही हो जाता है


2

लारवेल 5.5

पहली बार लारवेल को स्थापित करने के बाद, मुझे प्रसिद्ध "सार्वजनिक फ़ोल्डर की समस्या" का सामना करना पड़ा और मैं इस समाधान के साथ आया, जो कि मेरी व्यक्तिगत राय में , "क्लीनर" है, फिर अन्य जो मैंने वेब पर पाया।


उपलब्धियां

  • publicURI में शब्द नहीं है
  • .envजिज्ञासु लोगों के खिलाफ फाइल को सुरक्षित रखें

सब कुछ सिर्फ .htaccessउपयोग mod_rewriteऔर चार सरल नियमों का संपादन किया जा सकता है ।


कदम

  1. .htaccessफ़ाइल public/.htaccessको मुख्य रूट में ले जाएं
  2. इसे नीचे संपादित करें

मैंने सब कुछ टिप्पणी की, इसलिए यह स्पष्ट होना चाहिए (मुझे आशा है) उन लोगों के लिए भी जिन्होंने कभी उपयोग नहीं किया है mod_rewrite(ऐसा नहीं है कि मैं एक विशेषज्ञ हूं, सभी विपरीत)। इसके अलावा, नियमों को समझने के लिए, यह स्पष्ट होना चाहिए कि, लारवेल में, यदि बिल कनेक्ट होता है https://example.com, https://example.com/index.phpतो लोड किया जाता है। इस फ़ाइल में केवल कमांड है header("refresh: 5; https://example.com/public/"), जो अनुरोध भेजता है https://example.com/public/index.php। यह दूसरा index.phpनियंत्रक और अन्य सामान को लोड करने के लिए जिम्मेदार है।

# IfModule prevents the server error if the app is moved in an environment which doesn’t support mod_rewrite
<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews
    </IfModule>

    RewriteEngine On

    # RULES ORIGINALLY IN public/.htaccess ---
    # Redirect Trailing Slashes If Not A Folder...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} (.+)/$
    RewriteRule ^ %1 [L,R=301]

    # Handle Front Controller...
#    RewriteCond %{REQUEST_FILENAME} !-d
#    RewriteCond %{REQUEST_FILENAME} !-f
#    RewriteRule ^ index.php [L]

    # Handle Authorization Header
    RewriteCond %{HTTP:Authorization} .
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
    # --- END

    # PERSONAL RULES ---
    # All the requests on port 80 are redirected on HTTPS
    RewriteCond %{SERVER_PORT} ^80$
    RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R,L]

    # When .env file is requested, server redirects to 404
    RewriteRule ^\.env$ - [R=404,L,NC]

    # If the REQUEST_URI is empty (means: http://example.com), it loads /public/index.php
    # N.B.: REQUEST_URI is *never* actually empty, it contains a slash that must be set as match as below
    # .* means: anything can go here at least 0 times (= accepts any sequence of characters, including an empty string)
    RewriteCond %{REQUEST_URI} ^/$
    RewriteRule ^(.*) /public/index.php [L]

    # If the current request is asking for a REQUEST_FILENAME that:
    # a) !== existent directory
    # b) !== existent file
    # => if URI !== css||js||images/whatever => server loads /public/index.php, which is responsible to load the app and the related controller
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule !^(css|js|images|media)/(.*)$ /public/index.php [L,NC]

    # If the current request is asking for a REQUEST_FILENAME that:
    # a) !== existent directory
    # b) !== existent file
    # => if URI == css||js||images[=$1]/whatever[=$2] => server loads the resource at public/$1/$2
    # If R flag is added, the server not only loads the resource at public/$1/$2 but redirects to it
    # e.g.: bamboo.jpg resides in example.com/public/media/bamboo.jpg
    #       Client asks for example.com/media/bamboo.jpg
    #       Without R flag: the URI remains example.com/media/bamboo.jpg and loads the image
    #       With R flag: the server redirects the client to example.com/public/media/bamboo.jpg and loads the image
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(css|js|images|media)/(.*)$ /public/$1/$2 [L,NC]
    # --- END

</IfModule>

निम्न नियम (मूल रूप से public/.htaccess) को हटाया जा सकता है। एक ही नियम, वास्तव में, पिछले दो नियमों में अधिक विस्तृत तरीके से खोजा गया है।

# Handle Front Controller...
#    RewriteCond %{REQUEST_FILENAME} !-d
#    RewriteCond %{REQUEST_FILENAME} !-f
#    RewriteRule ^ index.php [L]

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


2

सबसे पहले आप इस चरणों का उपयोग कर सकते हैं

लारवेल 5 के लिए:

1. अपने Laravel रूट फ़ोल्डर में index.php का नाम बदलें server.php

2.। Lacvel रूट फ़ोल्डर में .htaccess फ़ाइल को / सार्वजनिक निर्देशिका से कॉपी करें।

स्रोत: https://stackoverflow.com/a/28735930

इन चरणों का पालन करने के बाद आपको सभी css और स्क्रिप्ट पथ को बदलने की आवश्यकता है, लेकिन यह थकाऊ होगा।

समाधान प्रस्ताव : बस आप helpers::assetफ़ंक्शन को मामूली परिवर्तन कर सकते हैं ।

इसके लिए :

  1. खुला हुआ vendor\laravel\framework\src\Illuminate\Foundation\helpers.php

  2. गोटो लाइन 130

  3. लिखने "public/".$pathके बजाय $path,

    function asset($path, $secure = null){
       return app('url')->asset("public/".$path, $secure);
    }

2
नियम नंबर 1: कभी भी कोर फाइल को एडिट न करें। यहां तक ​​कि अगर यह अब आसान और अच्छा लगता है, तो आप बाद में भुगतान करेंगे।
जनक डोंबावेला

@ जानकाडॉम्बेला मुझे ऐसा नहीं लगता क्योंकि:
फेरह कोकर

@JanakaDombawela मुझे ऐसा नहीं लगता क्योंकि: Senerio 1: यदि डेवलपर एक अनुभवी है: ओपन सोर्स कोड इस काम के लिए है Senerio 2: यदि डेवलपर एक जूनियर है, तो डेवलपर को अनुभव प्राप्त करने के लिए स्रोत कोड को संपादित करना होगा
Ferhat KOÇER

2
<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews -Indexes
    </IfModule>

    RewriteEngine On

    # Handle Authorization Header
    RewriteRule ^(.*)$ public/$1 [L]
    RewriteCond %{HTTP:Authorization} .
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

    # Redirect Trailing Slashes If Not A Folder...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} (.+)/$
    RewriteRule ^ %1 [L,R=301]

    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>

Mod_rewrite मॉड्यूल के साथ सक्रिय करें

sudo a2enmod rewrite

और अपाचे को पुनरारंभ करें

sudo service apache2 restart

.Htaccess फ़ाइलों (जो कि एक बहुत ही सामान्य उपयोग का मामला है) के भीतर mod_rewrite का उपयोग करने के लिए, डिफ़ॉल्ट VirtualHost को इसके साथ संपादित करें

sudo nano /etc/apache2/sites-available/000-default.conf

नीचे "DocumentRoot / var / www / html" निम्नलिखित पंक्तियों को जोड़ते हैं:

<Directory "/var/www/html">
AllowOverride All
</Directory>

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

sudo service apache2 restart

1

मैंने पहले कुछ लेख पढ़ा है और यह ठीक काम कर रहा है लेकिन वास्तव में नहीं जानता कि यह सुरक्षित है या नहीं

    a. Create new folder local.
    b. Move all project into the local folder expect public folder.
    c. Move all the content of public folder to project root.
    d. Delete the blank public folder
    f. Edit the index file. 

Index.php को संपादित करें

require __DIR__.'/../bootstrap/autoload.php';
$app = require_once __DIR__.'/../bootstrap/app.php';

सेवा

require __DIR__.'/local/bootstrap/autoload.php';
$app = require_once __DIR__.'/local/bootstrap/app.php';

1

यहां तक ​​कि अगर मैं लारवेल को रूट फ़ोल्डर पर डालने की सिफारिश नहीं करता हूं, तो कुछ मामले हैं जब इसे टाला नहीं जा सकता है; उन मामलों के लिए उपरोक्त विधियां संपत्ति के लिए काम नहीं करती हैं, इसलिए मैंने htaccess को बदलते हुए एक त्वरित सुधार किया: server.php को index.php पर कॉपी करने के बाद .htaccess फ़ाइल को संपादित करें।

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews
    </IfModule>

    RewriteEngine On

    ### fix file rewrites on root path ###
    #select file url
    RewriteCond %{REQUEST_URI} ^(.*)$
    #if file exists in /public/<filename>
    RewriteCond %{DOCUMENT_ROOT}/public/$1 -f
    #redirect to /public/<filename>
    RewriteRule ^(.*)$ public/$1 [L]
    ###############

    # Redirect Trailing Slashes If Not A Folder...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)/$ /$1 [L,R=301]

    # Handle Front Controller...

    #RewriteCond %{REQUEST_FILENAME} -d # comment this rules or the user will read non-public file and folders!
    #RewriteCond %{REQUEST_FILENAME} -f #
    RewriteRule ^ index.php [L]
</IfModule>

यह एक त्वरित सुधार था जो मुझे करना था इसलिए किसी को भी इसे अपग्रेड करने के लिए स्वागत है।


1

समस्या यह है कि यदि आप टाइप करते हैं / सार्वजनिक करते हैं और यह अभी भी url में उपलब्ध है, तो क्या मैंने एक फिक्स बनाया है जिसे सार्वजनिक / index.php में रखा जाना चाहिए

  $uri = urldecode(
     parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH)
  );

  if(stristr($uri, '/public/') == TRUE) {

    if(file_exists(__DIR__.'/public'.$uri)){

    }else{

      $actual_link = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? "https" : "http") . "://{$_SERVER['HTTP_HOST']}{$_SERVER['REQUEST_URI']}";
      $actual_link = str_replace('public/', '',$actual_link);
      header("HTTP/1.0 404 Not Found");
      header("Location: ".$actual_link."");
      exit();
      return false;
   }}

इस कोड की शांति जनता को url से हटा देगी और एक 404 देगी और फिर जनता के बिना url पर रीडायरेक्ट करेगी


0

एक और तरीका जो मैं उपयोग करता हूं, वह है प्रतीकात्मक लिंक बनाने के लिए (लिनक्स में, विन के बारे में पता नहीं) htdocs या www में ln कमांड का उपयोग करके ln projectname/public project । साइट इस प्रकार स्थानीयहोस्ट / प्रोजेक्ट के माध्यम से सुलभ है।


0

आप विभिन्न तरीकों का उपयोग करके सार्वजनिक कीवर्ड को url से हटा सकते हैं।

1) यदि आप समर्पित होस्टिंग का उपयोग कर रहे हैं और आपके पास रूट एक्सेस है तो आप वर्चुअल होस्ट का उपयोग करके सार्वजनिक कीवर्ड को url से हटा सकते हैं। आपको जनता के साथ DocumentRoot पथ देना चाहिए। इसलिए यह सार्वजनिक निर्देशिका से सूचकांक शुरू करेगा और इसे url से हटा देगा।

<VirtualHost *:80>
    ServerAdmin info@example.com
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot /var/www/html/{yoursourcedirectory}/public

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

2) यदि आपके पास अपनी होस्टिंग की रूट एक्सेस नहीं है, तो आपको अपनी रूट डायरेक्टरी में एक नई .htaccess फाइल को जेनरेट करना चाहिए और नीचे दिए गए कोड को डालना चाहिए।

<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
    Options -MultiViews
</IfModule>

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ ^$1 [N]

RewriteCond %{REQUEST_URI} (\.\w+$) [NC]
RewriteRule ^(.*)$ public/$1 

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ server.php
</IfModule>

आप यहां अधिक संदर्भ प्राप्त कर सकते हैं।


0

रूट निर्देशिका और .htaccess फ़ाइल को नीचे की तरह कोड बनाएँ।

<IfModule mod_rewrite.c>
 #Session timeout

<IfModule mod_negotiation.c>
    Options -MultiViews
</IfModule>

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ ^$1 [N]

RewriteCond %{REQUEST_URI} (\.\w+$) [NC]
RewriteRule ^(.*)$ public/$1

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ server.php

</IfModule>

/ सार्वजनिक निर्देशिका में .htaccess फ़ाइल बनाएँ और नीचे की तरह कोड रखें।

<IfModule mod_rewrite.c>
  <IfModule mod_negotiation.c>
    Options -MultiViews -Indexes
  </IfModule>

RewriteEngine On

# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} (.+)/$
RewriteRule ^ %1 [L,R=301]

# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>

-1

मुझे इस समस्या का सबसे कारगर समाधान मिला।

बस अपने मूल फ़ोल्डर .htaccessमें संपादित करें और निम्नलिखित कोड लिखें। और कुछ नहीं चाहिए

RewriteEngine on
RewriteCond %{REQUEST_URI} !^public
RewriteRule ^(.*)$ public/$1 [L]

<IfModule php7_module>
   php_flag display_errors Off
   php_value max_execution_time 30
   php_value max_input_time 60
   php_value max_input_vars 1000
   php_value memory_limit -1
   php_value post_max_size 8M
   php_value session.gc_maxlifetime 1440
   php_value session.save_path "/var/cpanel/php/sessions/ea-php71"
   php_value upload_max_filesize 2M
   php_flag zlib.output_compression Off
</IfModule>

-1

मैं यहाँ कुछ समाधान की कोशिश की और पाया htaccess कि लार्वा 5.2 के लिए काम करते हैं, इस तरह:

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [L,R=301]



RewriteCond %{REQUEST_URI} !(\.css|\.js|\.png|\.jpg|\.gif|robots\.txt)$ [NC]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ server.php

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !^/public/
RewriteRule ^(css|js|images)/(.*)$ public/$1/$2 [L,NC]
RewriteRule ^.env - [F,L,NC]
RewriteRule ^app - [F,L,NC]
RewriteRule ^bootstrap - [F,L,NC]
RewriteRule ^config - [F,L,NC]
RewriteRule ^database - [F,L,NC]
RewriteRule ^resources - [F,L,NC]
RewriteRule ^vendor - [F,L,NC]

जब आपके पास एक और फाइल या फोल्डर हो तो बस मना करें

RewriteRule ^your_file - [F,L,NC]

-1

आपको बहुत कुछ करने की ज़रूरत नहीं है, बस रूट निर्देशिका पर एक .htaccess फ़ाइल बनाएं और नीचे पेस्ट करें / सहेजें;

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^(.*)$ public/$1 [L]
</IfModule>

यह मुझे / सार्वजनिक / सार्वजनिक
zanderwar

@zanderwar, कृपया लारवेल संस्करण क्या है? इसके अलावा, मुझे आशा है कि आपके पास मुख्य निर्देशिका से उप-निर्देशिका पर आपकी परियोजना नहीं है?
विक्टर इफैनी एजीओगू

प्रोजेक्ट रूट है, संस्करण 5.6 है। * - यह साझा होस्टिंग पर हालांकि, एक उपडोमेन पर है; दुर्भाग्य से यह cPanel इंस्टॉलेशन public_html के भीतर एक फ़ोल्डर रखने के लिए उप-डोमेन को बल देता है
zanderwar
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.