मैं जनरेट किए गए Laravel URL में "public / index.php" कैसे निकाल सकता हूं?


90

मुझे लारवेल में उत्पन्न URL को निकालने index.phpया निकालने की आवश्यकता है public/index.php; आम तौर पर रास्ता है localhost/public/index.php/someWordForRoute, यह कुछ इस तरह होना चाहिएlocalhost/someWordForRoute.

.htaccess

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

RewriteEngine On

# Redirect Trailing Slashes.
RewriteRule ^(.*)/$ /$1 [L,R=301]

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

एप्लिकेशन / config / app.php

'url' => 'http://localhost',

मैं उसे कैसे बदल सकता हूं?


7
लारवेल में सुंदर यूआरएल । सुनिश्चित करें कि mod_rewriteसक्षम है।
क्रीटेन


@ क्रिएटेन काम नहीं = /
TuGordoBello

2
यह वह उपाय है जब अन्य समाधान dev-metal.com/enable-mod_rewrite-ubuntu-14-04-lts
TuGordoBello

क्या आपका दस्तावेज़ रूट इरादा फ़ोल्डर में इंगित कर रहा है, अर्थात/var/www/project_name/public
केई

जवाबों:


129

विकल्प 1: उपयोग .htaccess

यदि यह पहले से ही नहीं है, तो एक .htaccess फ़ाइल को Laravel रूट निर्देशिका में बनाएँ। .htaccessयदि आपके पास पहले से मौजूद नहीं है, तो अपनी Laravel रूट निर्देशिका को फ़ाइल बनाएँ । (सामान्य रूप से यह आपके public_htmlफ़ोल्डर के अंतर्गत है )

.Htaccess फ़ाइल को संपादित करें ताकि उसमें निम्न कोड हो:

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

अब आपको "/public/index.php/" भाग के बिना वेबसाइट तक पहुंचने में सक्षम होना चाहिए।

विकल्प 2: '/ सार्वजनिक' निर्देशिका में चीजों को रूट डायरेक्टरी में ले जाएँ

अपनी रूट डायरेक्टरी में एक नया फ़ोल्डर बनाएं और सार्वजनिक फ़ोल्डर को छोड़कर सभी फ़ाइलों और फ़ोल्डर को स्थानांतरित करें। आप इसे अपनी इच्छानुसार कुछ भी कह सकते हैं। मैं "laravel_code" का उपयोग करूँगा।

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

उसके बाद, हमें बस इतना करना है कि laravel_code/bootstrap/paths.phpफ़ाइल और फ़ाइल के स्थानों को संपादित करें index.php

में laravel_code/bootstrap/paths.phpकोड की निम्न पंक्ति को खोजें:

'app' => __DIR__.'/../app',
'public' => __DIR__.'/../public',

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

'app' => __DIR__.'/../app',
'public' => __DIR__.'/../../',

में index.php, इन पंक्तियों पाते हैं:

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

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

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

स्रोत: लारवेल में URL से / सार्वजनिक / कैसे निकालें


5
आप डेबियन लिनक्स का उपयोग करते हैं, संपादित करने के लिए मत भूलना etc/apache2/apache2.confसे बदल रहा है AllowOverride Noneकरने के लिए AllowOverride Allहै, जहां आप निर्देशिका config देखना <Directory /var/www/></Directory>
रॉबिन हुड

1
मेरे पास केवल .htaccess फ़ाइल को अपने रूट डायरेक्टरी में लाने के लिए था ताकि वह काम कर सके।
मेरियो रोड्रिग्स

8
उत्पादन मोड में / रूट पर जाना एक अच्छी सलाह नहीं है! सार्वजनिक फ़ोल्डर मौजूद होने का एक कारण है
टॉसलैब

पुनर्लेखन नियम काम की जांच सुनिश्चित करने के लिए कि अपाचे config <Directory ...config है AllowOverride All'की तरह यह कुछ: <Directory "/var/www/html/laravel/public"> Options Indexes FollowSymLinks MultiViews **AllowOverride All** </Directory>
येपेत Ongeri - inkalimeva

यदि मुझे होस्टिंग पर कोई एक्सेस नहीं है तो क्या होगा?
पीटर

40

मैंने लारवेल 4.2 पर यह कोशिश की

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

मैं आशा करता हूँ यह काम करेगा


1
यदि लुजान द्वारा स्वीकृत उत्तर काम नहीं करता है तो यह पर्याप्त होगा। हालांकि मैं सार्वजनिक फ़ोल्डर में index.php फ़ाइल को संपादित करना सुनिश्चित करूँगा, यदि वे सीधे उस लिंक पर जाते हैं तो उपयोगकर्ताओं को सार्वजनिक रूप से बाहर भेज देंगे।
ब्रैड बर्ड

4
Js

@MaHDyfo - क्यों सुरक्षित नहीं है? और कैसे ?
151291

2
@ 151291 क्योंकि .env फ़ाइल सभी के लिए सुलभ इस प्रकार आपकी साइट पर जाती है। जब तक आप इससे बचने के लिए अपने वेबसर्वर को सुरक्षित नहीं करते।
महदीफो

17

अन्य विकल्प के साथ भ्रमित न हों, नीचे दिए गए स्निपेट मैं उपयोग कर रहा हूं और आपके लिए भी उपयोगी होगा। नीचे दिए गए htacces को अपनी जड़ में रखें।

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

अपनी सार्वजनिक निर्देशिका पर जाएं और नीचे कोड स्निपेट के साथ एक और htaccess फ़ाइल डालें

<IfModule mod_rewrite.c>
    RewriteEngine On
    # Removes index.php from ExpressionEngine URLs  
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php?url=$1 [PT,L]

</IfModule>

यह काम कर रहा है... !!!

Laravel नीचे .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]

महान: आप मुझे बता सकते हैं कि इस विधि के पेशेवरों और विपक्ष क्या हैं?
मुहम्मद अतीक

मैंने केवल .htaccess को रूट (आपकी पहली स्निपेट) में संपादित किया और यह मेरे लिए तय किया, धन्यवाद!
पीर

13

यहां URL (सार्वजनिक 5) में सार्वजनिक प्रकाशन प्राप्त करने के लिए सरल चरण हैं

1: सभी फाइलों को सार्वजनिक फ़ोल्डर में कॉपी करें और उन्हें लार्वा रूट फ़ोल्डर में पेस्ट करें

2: 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';

लार्वा में 4 पथ 2 के $app = require_once __DIR__.'/bootstrap/start.php';बजाय है$app = require_once __DIR__.'/bootstrap/app.php';/app.php

बस इतना ही।


क्या साइट से अन्य लिंकिंग के संबंध में कोई अन्य जटिलताएं हैं?
हरिंग १०

यह एक महान समाधान की तरह दिखता है और सरल भी। लेकिन वास्तव में, जैसा कि हरिंग 10 ने कहा था। क्या इसके साथ कोई मुद्दे हैं?
पीटर

10

1) जांचें कि mod_rewrite सक्षम है या नहीं। /etc/apache2/mods-enabledनिर्देशिका पर जाएं और देखें कि क्या rewrite.loadउपलब्ध है। यदि नहीं, तो कमांड का उपयोग करके इसे सक्षम करें। यह sudo a2enmod rewriteफिर से लिखने वाले मॉड्यूल को सक्षम करेगा। यदि यह पहले से ही सक्षम है, तो यह संदेश दिखाएगा Module rewrite already enabled
2) सार्वजनिक निर्देशिका के लिए एक वर्चुअल होस्ट बनाएं ताकि http://localhost/public/index.phpहम देने के बजाय उस तरह का उपयोग कर सकें http://example.com/index.php। [इसलिए सार्वजनिक फ़ोल्डर नाम को छुपाया जाएगा]
3) फिर एक .htaccess बनाएं जो आपके url से index.php को छिपा देगा जो मूल निर्देशिका (सार्वजनिक फ़ोल्डर) के अंदर होना चाहिए

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?/$1 [L]

1
अपने कदम बढ़ाए। अभी तक कोई परिणाम नहीं मिला! मैं ऐसा क्यों नहीं कर रहा हूँ!
मुस्तफिज रहमान

लॉग जानकारी दें ताकि हम मूल कारण का पता लगा सकें
आर्किड

यहाँ पूर्ण लॉग फ़ाइल है: dropbox.com/s/8fhlbej86nqr5qj/laravel.log?dl=0
मोस्टफ़िज़ रहमान

मेरे लिए काम किया। वर्चुअल होस्ट को सीधे सार्वजनिक फ़ोल्डर में न जाएं।
cardi777

धन्यवाद। इसने मेरे लिए काम किया, मेरा mod_rewriteअक्षम था।
मौबह

5

यह संभावना लारवेल के साथ बहुत कम है और आपके अपाचे विन्यास के साथ सब कुछ करने के लिए।

क्या आपके पास अपाचे सर्वर कॉन्फिगर की सुविधा है? यदि ऐसा है, तो डॉक्स से इसे देखें:

सामान्य तौर पर, आपको केवल .htaccess फ़ाइलों का उपयोग करना चाहिए जब आपके पास मुख्य सर्वर कॉन्फ़िगरेशन फ़ाइल तक पहुंच न हो। उदाहरण के लिए, एक आम ग़लतफ़हमी है कि उपयोगकर्ता प्रमाणीकरण हमेशा .htaccess फ़ाइलों में किया जाना चाहिए, और, हाल के वर्षों में, एक और ग़लतफ़हमी है कि mod_rewrite निर्देश .htaccess फ़ाइलों में जाना चाहिए। यह महज मामला नहीं है। आप उपयोगकर्ता प्रमाणीकरण कॉन्फ़िगरेशन को मुख्य सर्वर कॉन्फ़िगरेशन में रख सकते हैं, और यह वास्तव में, चीजों को करने का पसंदीदा तरीका है। इसी तरह, mod_rewrite निर्देश मुख्य सर्वर कॉन्फ़िगरेशन में, कई मामलों में बेहतर काम करते हैं।

... सामान्य तौर पर, संभव होने पर .htaccess फ़ाइलों के उपयोग से बचा जाना चाहिए। कोई भी कॉन्फ़िगरेशन जिसे आप .htaccess फ़ाइल में डालने पर विचार करेंगे, ठीक उसी तरह से प्रभावी रूप से आपके मुख्य सर्वर कॉन्फ़िगरेशन फ़ाइल में एक खंड में बनाया जा सकता है।

स्रोत: अपाचे प्रलेखन

इसका कारण जो मैंने पहले उल्लेख किया है, वह यह है .htaccessकि यदि आप कर सकते हैं तो पूरी तरह से छुटकारा पाने के लिए सबसे अच्छा है और एक Directoryटैग के अंदर एक VirtualHostटैग का उपयोग करें । यह कहा जा रहा है, इस के बाकी आप .htaccessजो भी कारण के लिए मार्ग के साथ चिपके हुए हैं मान जा रहा है ।

इसे तोड़ने के लिए, कुछ चीजें हो सकती हैं:

  1. मैं ध्यान दें, शायद व्यर्थ, कि आपकी फ़ाइल .htaccesआपके प्रश्न में नामित है। मेरा अनुमान है कि यह एक टाइपो है, लेकिन बंद मौके पर आपने इसे नजरअंदाज कर दिया है और यह वास्तव में सिर्फ दूसरे एस को याद कर रहा है, यह बिल्कुल मामूली त्रुटि है जो मुझे दीवार के खिलाफ अपना सिर पीटने के लिए छोड़ देगा, जो कुछ और अधिक चुनौतीपूर्ण लग रही है ।

  2. आपका सर्वर अनुमति नहीं दे सकता है .htaccess । इसे जांचने के लिए, अपनी अपाचे कॉन्फ़िगरेशन फ़ाइल पर जाएं। आधुनिक अपाचे में यह आमतौर पर एक कॉन्फिग फ़ाइल में नहीं होता है, इसलिए सुनिश्चित करें कि आप अपने ऐप में मौजूद किसी भी चीज़ का उपयोग कर रहे हैं, जहाँ भी यह मौजूद है। परिवर्तन

    AllowOverride none
    

    सेवा

    AllowOverride all
    

    एक फॉलोअप के रूप में, अपाचे दस्तावेज़ यह भी सलाह देते हैं कि, सुरक्षा उद्देश्यों के लिए, आप हर फ़ोल्डर के लिए ऐसा नहीं करते हैं यदि आप इसके लिए जा रहे हैं .htaccess पुनर्लेखन लिए । इसके बजाय, इसे उन फ़ोल्डरों के लिए करें जिन्हें आपको जोड़ने की आवश्यकता .htaccessहै।

  3. क्या आपने mod_rewriteसक्षम किया है? यह मुद्दों का कारण हो सकता है। मुझे लगता है कि आपके पास शीर्ष पर टैग है <IfModule mod_rewrite.c>। उन टैग को कमेंट करके देखें और अपाचे को पुनः आरंभ करें। यदि आपको कोई त्रुटि मिलती है तो यह संभवतः है क्योंकि आपको सक्षम करने की आवश्यकता है mod_rewrite: Apache 2.2 के लिए mod_rewrite कैसे सक्षम करें

उम्मीद है की यह मदद करेगा। मैंने कुछ सबसे सामान्य मुद्दों का नाम दिया है, लेकिन कई अन्य हैं जो अधिक सांसारिक या अद्वितीय हो सकते हैं। एक देव सर्वर पर एक और सुझाव? अपाचे को फिर से स्थापित करें। यदि संभव हो, तो एक अच्छा ट्यूटोरियल के साथ एक अलग स्रोत से ऐसा करें।


Apache2 कॉन्फ़िगरेशन सेटिंग्स के लिए शानदार कैच, मुझे यह सेटिंग हर बार याद आती है।
अभिषेक

4

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

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

बस !! :)


2

यह भी सुनिश्चित करें कि .htaccess फ़ाइल को संपादित करने के बाद Rewrite Engline चालू हो

sudo a2enmod rewrite

अच्छा अवलोकन मैं एक नए सर्वर पर था और वास्तव में इसे सक्षम करना था (और अपाचे कॉन्फ़िगरेशन में आवश्यक बिट्स को जोड़ने के लिए) इस digitalocean.com/community/tutorials/…
cdsaenz

1

एक सुंदर URL के साथ लारवेल जहाज। पहले से ही ... आपको बॉक्स से बाहर जाने के लिए अच्छा होना चाहिए ... http://laravel.com/docs/installation#pretty-urls

सुनिश्चित करें कि mod_rewrite सक्षम है और आपके घर का रास्ता आपके एप्लिकेशन की सार्वजनिक निर्देशिका पर सेट है।


मैंने सक्रिय किया mod_rewriteऔर मैंने उस पृष्ठ पर और अभी भी बिना काम के कोड की प्रतिलिपि बनाई
TuGordoBello

1
अपाचे में सुनिश्चित करें कि आपका पथ आपके एप्लिकेशन के सार्वजनिक फ़ोल्डर में सेट है।
किसुका

ServerAdmin webmaster@localhost DocumentRoot /home/web-apps/myproject/public
तुओगार्डबेलो

क्या आपने mod_rewrite को सक्षम करने के बाद अपाचे को फिर से शुरू किया था?
किसुका

मेरे पास एक फ़ोल्डर है जिसे userवह जगह है जहां मैं तस्वीरें रखता हूं, मेरे पास एक ब्लेड फ़ाइल भी है user, जब मैं URL में लिखता हूं तो मुझे myproject.com/userफ़ोल्डर की सामग्री दिखाई देती है, चित्र
TuGordoBello

1

आपको ऐसा करने के लिए निम्न चरणों का पालन करना होगा, जो इस प्रकार हैं

  • अपने प्रोजेक्ट के सार्वजनिक फ़ोल्डर तक अपना डोमेन मैप करें (यानी / var / www / html / yourproject / public) (यदि लिनक्स का उपयोग कर रहे हैं)

  • अपने सार्वजनिक फ़ोल्डर पर जाएं अपनी .htaccessफ़ाइल को वहां संपादित करें

AddHandler application/x-httpd-php72 .php
<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 non-www to www
    RewriteCond %{HTTP_HOST} !^www\.
    RewriteRule .* https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

    # Redirect non-http to https
    RewriteCond %{HTTPS} off
    RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

    # 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]

    # Remove index.php
    RewriteCond %{THE_REQUEST} ^GET.*index\.php [NC]
    RewriteRule (.*?)index\.php/*(.*) /$1$2 [R=301,NE,L]
</IfModule>


  • अंतिम तीन नियम हैं यदि आप बिना किसी मार्ग के सीधे पहुँच रहे हैं https, तो यह सुरक्षा करता है।

0
 RewriteEngine on

 RewriteCond %{REQUEST_FILENAME} !-f
 RewriteCond %{REQUEST_FILENAME} !-d

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

.htaccess में इस का उपयोग करें और सर्वर को पुनरारंभ करें


0

आशा है कि यह मेरी तरह मदद करता है।

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

0

मैंने अभी एक प्रोजेक्ट के लिए Laravel 5 स्थापित किया है और रूट नामक एक फाइल है server.php

इसे बदलें index.phpऔर यह काम करता है या टर्मिनल में टाइप करता है:

$cp server.php index.php

0

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



0

यदि आप IIS विंडोज सर्वर का उपयोग web.configरूट फ़ोल्डर में फ़ाइल जोड़ते हैं और नीचे कोड डालते हैं:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <rule name="Imported Rule 1" stopProcessing="true">
                    <match url="^(.*)$" ignoreCase="false" />
                    <conditions logicalGrouping="MatchAll">
                        <add input="{URL}" pattern="^system.*" ignoreCase="false" />
                    </conditions>
                    <action type="Rewrite" url="/index.php/{R:1}" />
                </rule>
                <rule name="Imported Rule 2" stopProcessing="true">
                    <match url="^(.*)$" ignoreCase="false" />
                    <conditions logicalGrouping="MatchAll">
                        <add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" negate="true" />
                        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" ignoreCase="false" negate="true" />
                        <add input="{R:1}" pattern="^(index\.php|images|robots\.txt|css)" ignoreCase="false" negate="true" />
                    </conditions>
                    <action type="Rewrite" url="index.php/{R:1}" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>

और यदि आप इसका .htaccess उपयोग करते हैं तो :

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

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

3
अपने समाधान के लिए और अधिक स्पष्टीकरण
नारुतो

-3

के अनुसार Laravel 5.3 चीजों से ऊपर ठीक से काम नहीं है, लेकिन कृपया शांत हो सकता है और नीचे दिए गए चरणों का पालन करें:

चरण 1. लार्वा परियोजना के अंदर जाएं
चरण 2। एक यादृच्छिक निर्देशिका / फ़ोल्डर बनाएं। लार्वावेल्ड
स्टेप 3. सभी फोल्डर और फाइल्स ( पब्लिक फोल्डर को छोड़कर )
स्टेप 4. सभी फोल्डर और फाइल्स को ले जाएं, जो लार्वा प्रोजेक्ट के लिए पब्लिक फोल्डर के अंदर हैं।
चरण 5। अब लार्वा प्रोजेक्ट के अंदर index.php फाइल है, कृपया इसे खोलें और नए पथ के अनुसार बूटस्ट्रैप के लिए फ़ोल्डर पथ को बदलें जैसे कि यह पहले " DIR की आवश्यकता थी ।" / .. / bootstrap / autoload.php '; " अब यह " डीआईआर की आवश्यकता है ।" / लार्वाकोड / बूटस्ट्रैप / ऑटोलैड. एफपी ' बन जाएगा ; "

यह सिर्फ सार्वजनिक और इंडेक्स के बिना अपने यूआरएल को चलाने के लिए है। http: // localhost / blog /

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