ল্যারাভেল 5 - ইউআরএল থেকে সর্বজনীন সরান


240

আমি জানি এটি একটি খুব জনপ্রিয় প্রশ্ন তবে আমি লারাভেল ৫ এর জন্য কোনও কার্যকরী সমাধান খুঁজে পাচ্ছি না I've

আমি কোনও ভিএম চালাতে চাই না, প্রকল্পগুলির মধ্যে স্যুইচ করার সময় এটি কেবল বিশ্রী মনে হয়।

আমি আমার দস্তাবেজটিকে পাবলিক ফোল্ডারে সেট করতে চাই না, প্রকল্পগুলির মধ্যে স্যুইচ করার সময় এটিও বিশ্রী হয়।

আমি .htaccess mod_rewrite পদ্ধতি চেষ্টা করেছি tried

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

এটি আমাকে কেবল সংকলিত.এফপি লাইনটিতে একটি লারভেল নটফাউন্ড এইচটিপিএক্সপেশন দেয় ception

কিছুক্ষণ আগে আমি যখন L4 চেষ্টা করেছি, তখন আমি পাবলিক ফোল্ডারের সামগ্রীগুলি রুটে স্থানান্তরিত করার পদ্ধতিটি ব্যবহার করেছি। এল 5 এর কাঠামোটি একেবারেই আলাদা এবং একই ধাপ অনুসরণ করে লারাভেলকে পুরোপুরি ভেঙে দিয়েছে (সার্ভারটি কেবল একটি ফাঁকা পৃষ্ঠা ফেরত দেবে)।

উন্নয়নের পরিবেশে 'পাবলিক' অপসারণের কি কোনও শালীন পদ্ধতি রয়েছে যা:

  1. এল 5 নিয়ে কাজ করে
  2. আমাকে সহজেই প্রকল্পগুলির মধ্যে স্যুইচ করার অনুমতি দেয় (আমি সাধারণত যে কোনও সময়ে 2 বা 3 এ কাজ করছি)।

ধন্যবাদ

** আমি এমএএমপি এবং পিএইচপি 5.6.2 ব্যবহার করছি


1
গাইডের ফোল্ডারটির কাঠামোটি আমার থেকে আলাদা, আমি ভাবছি তিনি এল 5 ব্যবহার করছেন না? বুটস্ট্র্যাপ / পাথ ফাইলে তিনি যে পরিবর্তনগুলি করেছিলেন তা আমি বাদ দিয়েছি, কারণ এটি বিদ্যমান নেই। প্রকল্পটি যদিও কাজ করছে বলে মনে হচ্ছে। আপনি কি মনে করেন এটি ঠিক আছে?
ব্যবহারকারী 1537360

আমার ভুল আমাকে এল 5
কমলেশ এর

কোনও সাফল্যের জন্য চেষ্টা করা হয়নি
কামলেশ.বার

1
এটি কেবল সূচি.এফপি ফাইলের রাস্তাগুলি সংশোধন করে কাজ করছে বলে মনে হচ্ছে, তবে আমি লারাভেলের কাছে নতুন তাই স্পষ্টতই এটি স্থিতিশীল / নিরাপদ কিনা তা নিয়ে মন্তব্য করতে পারবেন না।
ব্যবহারকারী 1537360

অন্যান্য ফোল্ডার / ফাইলগুলি আপনার নথির মূলের নীচে থাকার কথা।
মাইক রকট্যাট

উত্তর:


431

লারাভেল 5 এর জন্য:

  1. পুনঃনামকরণ server.phpআপনার Laravel রুট ফোল্ডারেindex.php
  2. ডিরেক্টরি থেকে আপনার লারাভেল রুট ফোল্ডারে .htaccessফাইলটি অনুলিপি করুন /public

এটাই!


105
এটি যেহেতু অনিরাপদ হতে পারে, তা নিশ্চিত করুন কেউ আপনার .envফাইলের জন্য অনুরোধ করতে না পারে যদি না আপনি স্পষ্ট
লেখায়

48
আপনি যদি মূল থেকে আপেক্ষিক পথটি ব্যবহার করে আপনার সম্পদগুলি উল্লেখ করছেন তবে এটি কাজ করবে না। "/assets/styles.css" এবং আরও অনেক কিছু। আমি এখনও এটি সার্ভারের মাধ্যমে স্থাপনের সর্বোত্তম উপায় সন্ধানের সাথে লড়াই করছি
গাজানফার মীর

1
এটি কাজ করে ... তবে এটি ব্যবহারে কোনও ফল / অসুবিধা আছে কি? অনেকে ভার্চুয়াল হোস্ট সেটআপ করার পরামর্শ দিচ্ছেন, বা ম্যানুয়ালি ফাইলগুলি অনুলিপি করার পরামর্শ দিচ্ছেন ইত্যাদি ... এটি কি প্রোডাকশনেও কাজ করে?
বগজ

1
@ গ্যাবলেউক্স <Files "log.txt">Order Allow,DenyDeny from all</Files>আপনার সম্বোধিত সমস্যাটি সমাধান করে। এটি এখন নিরাপদ নাকি আরও ঝুঁকিপূর্ণ?
প্রজাপতি

1
@ বাটারফ্লাইটি আপনার সার্ভার কনফিগারেশনের উপর নির্ভর করে। উপরেরটি কেবল ব্লক করবে log.txt। আপনি নিশ্চিত হন যে আপনি সংবেদনশীল ডেটা জনসাধারণের কাছ থেকে অবরুদ্ধ করেছেন। আপনি যদি লারাভেল ব্যবহার করেন এবং ডকুমেন্টেশনটি মনোযোগ সহকারে পড়েন তবে আপনার ওয়েবরুটটি দেখতে দেখতে ভাল লাগবে project/public। করার জন্য একটি চেহারা আছে এই Stackoverflow আলোচনা QA । আপনার ওয়েবসারভার সেটআপ করুন এবং সেক্ষেত্রে চেষ্টা করুন https://example.com/.env। আপনি যদি নিজের পাসওয়ার্ডগুলি দেখতে পান তবে আপস করা সমস্ত কিছু বিবেচনা করুন এবং সমস্ত পাসওয়ার্ড পরিবর্তন করুন।
গ্যাবলাক্স

126

আমি 2 টি উত্তর ব্যবহার করে সমস্যার সমাধান করেছি:

  1. ইন্ডেক্স.পিএফ-এ সার্ভার.পিএইচপি নামকরণ (কোনও পরিবর্তন নেই)
  2. রুট ফোল্ডারে পাবলিক ফোল্ডার থেকে .htaccess অনুলিপি করুন (যেমন রিমন.ইকজোন নীচে বলেছেন)
  3. স্ট্যাটিক্সের জন্য নীচে এটি .htacaccing পরিবর্তন করা:

    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
হ্যালো @ কেএ_লিন আমি কীভাবে কাউকে .env এত লোকালহোস্ট / ওএপ / .env
ফোকওয়া বেস্ট

8
RewriteRule ^.env - [F,L,NC]
হুম

2
বা <Files ~ "\.env$"> Order allow,deny Deny from all </Files>
কা_লিন

অনেক ধন্যবাদ কাকা_লিন, / পাবলিক / এর মাধ্যমে অ্যাক্সেস সরিয়ে দেওয়ার কোনও উপায় আছে কি? www.yoursite.com এর মত কাজ করে তবে www.yoursite.com/public কাজ করে, শেষটি কী সরিয়ে নেওয়া সম্ভব?
আদবা

8
এটি কাজ করছে তবে সিএসএস,
জেএস

93

লারাভেল 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
সেরা উত্তর! আমার উদাহরণটিতে কেবল একজনই কাজ করেছেন, এতে অবশ্যই আরও বেশি ভোট হওয়া উচিত
ফিলিউস বোনাচি

ধন্যবাদ এটি আমার জন্য কাজ। তবে আমি এটির কোনও সুরক্ষা সমস্যা আছে কিনা তা জানতে চাই।
রাহুল সিংহ চৌহান

@ রহুলসিংহচৌহান আমার আনন্দের বিষয়। প্রিয় আমি সুরক্ষা সমস্যা সম্পর্কে জানি না তবে এটি নিরাপদ হওয়া উচিত
রাহাম

2
এই নিয়ম RewriteRule ^ ^$1 [N] কি করে?
gonzo

এই একমাত্র আমার জন্য কাজ করেছেন ... আপনাকে অনেক ধন্যবাদ
আরশাদ আমীন

85

না!

আপনি অবশ্যইserver.php আপনার লারাভেল রুট ফোল্ডারে নাম পরিবর্তন করবেন না index.php এবং ডিরেক্টরি থেকে আপনার লারাভেল রুট ফোল্ডারে .htaccessফাইলটি অনুলিপি করবেন না /public!!!

এই পদ্ধতিতে প্রত্যেকে আপনার কিছু ফাইল অ্যাক্সেস করতে পারে ( .envউদাহরণস্বরূপ)। এটি নিজে চেষ্টা করো. আপনি এটা চান না!


আপনি কি

পরিবর্তে, আপনার .htaccessনিজের রুটে একটি ফাইল তৈরি করা উচিত :

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

এটি নিঃশব্দে আপনার সমস্ত বেস ইউআরআই /publicফোল্ডারে পুনর্লিখন করবে । এমনকি সব শিরোলেখ , উদাহরণস্বরূপ HTTP- র অনুমোদন শিরোলেখ , এবং সমস্ত ঐচ্ছিক কোনো URI পরামিতি চুপটি কাছে হস্তান্তর করা হবে না /publicফোল্ডারের হিসাবে ভাল।

এখানেই শেষ

ডকারের সাথে লারাভেল প্রকল্প স্থাপন করার সময় দয়া করে নোট করুন: আপনার এটি করার দরকার হবে না।


2
এটি প্রযোজনায় ভাল কাজ করছে তবে এটি কোনও পরামর্শে স্থানীয়ভাবে কাজ করছে না?
হরিতসিংহ গোহিল

2
এটি পুরোপুরি কাজ করছে! স্থানীয় এবং সার্ভার সুরক্ষা সাহায্যের জন্য ধন্যবাদ!
ঘনশ্যাম নাকিয়া

1
হ্যালো, @ ডারকজানস্পিলম্যান আমি আমার হোস্টিংয়ের মতো সাবফোল্ডারের ভিতরে আমার ল্যারাভেল ফাইলগুলি আপলোড করার চেষ্টা করছি: (উদাহরণ.com/projects/laravel/blog) সেক্ষেত্রে দর্শনার্থীদের উদাহরণ / প্রকল্পগুলি / ল্যারাভেল / ব্লগ / দেখতে হবে সর্বজনীন, যাতে আমি আপনার কোডের সাথে একটি .htaccess ফাইলটি ব্লগ ফোল্ডার রুটে রেখেছি এবং এটি সর্বজনীন ফোল্ডারে পুনর্নির্দেশ করতে চাই। কিন্তু এটি কাজ করছে না। এখানে ত্রুটি ঘটছে: অনুরোধ করা URL / সর্বজনীন / এই সার্ভারে পাওয়া যায় নি। আমি কীভাবে এটি সমাধান করতে পারি?
শোভন দাশ

1
এই উত্তর আন্ডাররেটেড হয়। বোল্ড জন্য আপভোটড এবং হাইলাইট করবেন না। এটি পুরোপুরি ঠিক আছে।
বরুণ বেদ

2
নিখুঁত উত্তর
অ্যালসারে

43

লার্যাভেল 5 ইউআরএল থেকে সর্বজনীন সরানোর সহজ উপায়। আপনাকে পাবলিক ডিরেক্টরি থেকে সূচি.পিএইচপি এবং .htaccess কাটাতে হবে এবং এটি মূল ডিরেক্টরিতে আটকানো দরকার, সব ঠিক আছে এবং সূচি.এফপি হিসাবে দুটি লাইন প্রতিস্থাপন করুন

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

দ্রষ্টব্য : উপরোক্ত পদ্ধতিটি কেবল নতুনদের জন্য কারণ তারা ভার্চুয়াল হোস্ট সেট আপ করার ক্ষেত্রে সমস্যায় পড়তে পারে এবং সর্বোত্তম সমাধানটি হ'ল স্থানীয় মেশিনে ভার্চুয়াল হোস্ট সেটআপ করা এবং প্রকল্পটির সর্বজনীন ডিরেক্টরিতে নির্দেশ করা।


1
সিএসএস লোড না হওয়ার পরে, বিসিওজ সমস্ত CSS জনসাধারণের মধ্যে রয়েছে এবং জনগণকে ইউআরএল থেকে সরানো হয়েছে
মিঃ তোমার

1
আপনি লোড করার সময় জেএস বা সিএসএস ফাইলগুলির আগে "পাবলিক /" রাখতে পারেন, যেমন এইচটিএমএল :: স্ক্রিপ্ট ("পাবলিক / জেএস / ....."); - তবে সর্বোত্তম সমাধানটি ভার্চুয়াল হোস্ট হবে ...
মুহাম্মদ সাদিক

39

@ rimon.ekjon বলেছেন:

আপনার লারাভেল রুট ফোল্ডারে সার্ভার.এফপিটির নাম পরিবর্তন করে সূচি.পি.পি করুন এবং / পাবলিক ডিরেক্টরি থেকে .htaccess ফাইলটি আপনার লারাভেল রুট ফোল্ডারে অনুলিপি করুন। -- এটাই !! :)

এটা আমার জন্য কাজ করে। তবে / সর্বজনীন ডিরেক্টরিতে থাকা সমস্ত সংস্থানীয় ফাইলগুলি ইউআরএলগুলি সন্ধান করতে এবং অনুরোধ করতে পারেনি, কারণ আমি সম্পদ () সহায়ক ব্যবহার করেছি।

আমি নীচে / ইলুমিনেট / ফাউন্ডেশন / হেল্পার্স.এফপি / এ্যাসেট () ফাংশনটি পরিবর্তন করেছি:

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]
শাদম্যান

29

মূলে .htaccess ফাইল তৈরি করুন এবং এটিতে এই লাইনগুলি যুক্ত করুন

<IfModule mod_rewrite.c>
    RewriteEngine On

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

এটাই!

উপরের কোডটি root_html ফোল্ডারে কাজ করে। আপনার কোর লারাভেল ফাইলটি সর্বজনীন_এইচটিএমএল ফোল্ডারের অভ্যন্তরে থাকা উচিত বলে যদি আপনার ডিরেক্টরিটি যদি পাবলিক_এইচটিএমএল / লারাভেলাপ / পাবলিকের মতো লাগে এবং আপনি উপরের কোডটি লারাভেলাপের ভিতরে রাখেন তবে এটি কাজ করবে না। সুতরাং আপনাকে অবশ্যই আপনার সমস্ত মূল ফাইলগুলি সর্বজনীন_এইচটিএমএলে অনুলিপি করতে হবে এবং .htaccess ফাইলটি সেখানে রেখে দিতে হবে।

আপনি যদি কোডটি একটি উপ-ডিরেক্টরিতে রাখতে চান তবে আপনি একটি সাবডোমেন তৈরি করতে পারেন তবে এই কোডটি তার জন্যও কাজ করবে।


আপনার উত্তরটি পড়ার আগে আমি নীচে উত্তর দিয়েছি এবং এটি অবশ্যই স্বীকৃত উত্তর। কোনও ফাইল পরিবর্তন হয় নি: কেবল একটি সহজ, চতুর নিয়ম।
ব্রিগো

@ রহম আপনার বর্তমান ইউআরএল কি?
অভিনব সরস্বত

2
এই ভদ্রলোকদের কাজের উপরে কেবল একটি সংক্ষিপ্ত বিবরণ যুক্ত করতে চাই। উপরের কোডটি পাবলিক_এইচটিএমএল ফোল্ডারে কাজ করে (আমারও সমস্যা ছিল)। আপনার মূল লারাভেল ফাইলটি পাবলিক_এইচটিএমএল ফোল্ডারের অভ্যন্তরে থাকা উচিত বলে আমি ভুল করেছিলাম যে আমার ডিরেক্টরিটি सार्वजनिक_এইচটিএমএল / লারাভেলাপ / পাবলিকের মতো দেখাচ্ছে যদি আপনি উপরের কোডটি লারাভেলাপের ভিতরে রাখেন তবে এটি কাজ করবে না। সুতরাং আপনাকে অবশ্যই আপনার সমস্ত মূল ফাইলগুলি সর্বজনীন_এইচটিএমএলে অনুলিপি করতে হবে এবং .htaccess ফাইলটি সেখানে রেখে দিতে হবে। লার্যাভেলের জন্য সেন্টোস এবং সিপানেল হোস্টিংয়ের উল্লেখ।
দিপেশ থাপা

এই পদ্ধতিটি ব্যবহার করে ত্রুটিগুলি কী?
স্ক্রিপ্ট 47

1
আমার কাছে কবজির মতো কাজ করেছিল, আমার কাছে কেবল সিপানেল ওয়েবশোস্ট ছিল এবং অ্যাপাচের জন্য রুট ডিরেক্টরীটি পরিবর্তন করতে পারিনি। ধন্যবাদ! সবচেয়ে সহজ এবং নিরাপদ এটি আপনার মূল ফোল্ডার সামগ্রীটি দেখতে দেবে না
ভিনসেন্ট ডেকাক্স

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
এটি ঠিকঠাক কাজ করছে তবে এখনও ইউএনএল থেকে সরাসরি এনভিল ফাইল অ্যাক্সেসযোগ্য।
মনোজ সিং

এটি কি নিরাপদ সমাধান?
সিনিয়র পিএইচপি প্রোগ্রামার টিম

23

1) আমি L5 তে সার্বজনীন ডিরেক্টরি সরানোর জন্য কোনও কাজের পদ্ধতি খুঁজে পাইনি । আপনি বুটস্ট্র্যাপে কিছু জিনিস সংশোধন করতে পারেন index.php, এটি প্রদর্শিত হয় যে বেশ কয়েকটি সহায়ক ফাংশন সেই পাবলিক ডিরেক্টরিটি সেখানে রয়েছে অনুমানের উপর ভিত্তি করে। সর্বোপরি সত্যই আপনার সরকারী ডিরেক্টরি সরানো উচিত নয়।

2) যদি আপনার এমএএমপি ব্যবহার করে থাকে তবে আপনার উচিত প্রতিটি প্রকল্পের জন্য নতুন ভোস্ট তৈরি করা উচিত, প্রত্যেকটি জনসাধারণের ডিরেক্টরিতে কাজ করে। একবার তৈরি হয়ে গেলে আপনি প্রতিটি প্রকল্পকে আপনার সংজ্ঞায়িত সার্ভারের নাম দ্বারা অ্যাক্সেস করতে পারেন:

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

15

জনসাধারণকে অপসারণ করা সম্ভবলারাভেল 5-এ url । এই পদক্ষেপগুলি অনুসরণ করুন:

পদক্ষেপ 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';

এবং সমস্ত ক্যাশে এবং কুকিজ অপসারণ করুন।


হাই, আমি আপনার পদ্ধতিটি চেষ্টা করেছি, উপরের পদক্ষেপগুলি সম্পাদন করেছি তবে এটি নীচের ত্রুটিগুলি দেখায়: সতর্কতা: প্রয়োজনীয়_অনসেস (ডি: jects প্রকল্পগুলি ra লারাভেল / পাবলিক / সূচক.ফ্প): স্ট্রিমটি খুলতে ব্যর্থ হয়েছে: ডি তে এই জাতীয় কোনও ফাইল বা ডিরেক্টরি নেই: 21 লাইনে jects প্রকল্পগুলি \ লারাভেল \ সার্ভার.পিএফ মারাত্মক ত্রুটি: আবশ্যক_অনস (): ব্যর্থ খোলার প্রয়োজন 'ডি: jects প্রকল্পগুলি \ লারাভেল / পাবলিক / ইনডেক্স.পিএফ' (অন্তর্ভুক্ত_পথ = ';; সি: am xampp \ পিএইচপি \ পিয়ার) ) ডি তে: 21 প্রকল্পগুলি \ লারাভেল \ server.php লাইনে 21
আলী শাহজাদ

এটি একটি নিখুঁত উত্তর নয়, বরং এটি অনেকটা অনিরাপদ উপায়।
রোহিত

11

ধরা যাক আপনি অন্যান্য সমস্ত ফাইল এবং ডিরেক্টরিগুলি 'লোকেল' নামে একটি ফোল্ডারে রেখেছেন।

এখানে চিত্র বর্ণনা লিখুন

কেবল সূচি.এফপি যান এবং এই দুটি লাইন সন্ধান করুন:

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

এখানে সেরা এবং সংক্ষিপ্ততম সমাধানটি আমার পক্ষে লারাভেল 5.5 এর জন্য 2018 সালের হিসাবে কাজ করে

  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. এখন, পাবলিক ডিরেক্টরি প্রয়োজন নেই, তাই allyচ্ছিকভাবে আপনি এখনই এটি মুছে ফেলতে পারেন
  3. এখন index.php খুলুন এবং নিম্নলিখিত প্রতিস্থাপন করুন

ডিআইআর প্রয়োজন '' / .. / বুটস্ট্র্যাপ / অটোলোয়াড.এফপি ';

প্রতি

ডিআইআর প্রয়োজন ; '/ বুটস্ট্র্যাপ / অটোলোয়াড.এফপি';

এবং

$ অ্যাপ্লিকেশন = Require_once থেকে DIR । '/ .. / বুটস্ট্র্যাপ / start.php';

প্রতি

$ অ্যাপ্লিকেশন = প্রয়োজনীয়_অনস ডিআইআর । '/ বুটস্ট্র্যাপ / স্টার্ট.এফপি';

  1. এখন বুটস্ট্র্যাপ / পাথ.প্প খুলুন এবং সর্বজনীন ডিরেক্টরি পাথ পরিবর্তন করুন:

'সর্বজনীন' => ডিআইআর । '/ .. / সর্বজনীন',

প্রতি

'সর্বজনীন' => ডিআইআর । '/ ..',

এবং এটি হ'ল, এখন চেষ্টা করুন http: // লোকালহোস্ট / লারাভেল /


এটি সব কিছুর জন্য ঠিক আছে। তবে কারিগর কমান্ড কাজ করছে না, কেবল এটি "ইনপুট ফাইলটি খুলতে পারল না: কারিগর" দেখায়। কোন পরামর্শ আছে?
কবির হোসেন

এই পদ্ধতিটি কাজ করেছে, আপনি যদি ব্যবহারকারীদের কাছে আপনার ডাটাবেস শংসাপত্রগুলি প্রকাশ করতে ঠিক করেন। লোকালহোস্ট / লারাভেল / .env
মাসউদউরআরহমান

8

ইউআরএল থেকে সর্বজনীন সরানোর 4 সেরা উপায়।

আপনি যদি ইউআরএল থেকে জনসাধারণকে অপসারণ করতে অন্য কোনও কৌশল ব্যবহার করেন তবে সার্ভার.ফ্পের নামটিকে সূচক.এফপি পরিবর্তিত করে মূল ফাইলের পথে পরিবর্তন করা। স্পষ্টতই, এটি করবেন না। তাহলে লারাভেল কেন সমাধানটি এভাবে দিচ্ছে না কারণ এটি করার উপযুক্ত উপায় নয়।

1) লারাভেলের এইচটিসেস ব্যবহার করে ইউআরএল থেকে সর্বজনীন সরান

রুটে একটি .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) আপনার স্থানীয় একটি ভার্চুয়াল হোস্ট তৈরি করে পাবলিক সরান

আমি উইন্ডো অপারেটিং সিস্টেমের জন্য এখানে ডেমো দিচ্ছি। তবে আমি কোনও পদক্ষেপটি সংজ্ঞায়িত করার চেষ্টা করব যাতে যে কেউ সহজেই পদক্ষেপটি অনুসরণ করতে পারে। আপনি নির্দিষ্ট অপারেটিং সিস্টেমের জন্যও গুগলে গবেষণা করতে পারেন।

পদক্ষেপ 1: সি যান: \ উইন্ডোজ \ system32 \ ড্রাইভার \ ইত্যাদি Administ প্রশাসক মোডে "হোস্ট" ফাইলটি খুলুন।

পদক্ষেপ 2: এটিতে নিম্নলিখিত কোড যুক্ত করুন। এখানে, আমি আপনাকে প্রজেক্টনাম.লোকাল ডোমেন নেম ডেমো একটি ডেমো দিচ্ছি, আপনি আপনার পছন্দ অনুযায়ী যে কোনও নির্দিষ্ট করতে পারেন। এটিকে প্রতিটি স্থানে স্থির করুন।

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: শেষ কিন্তু গুরুত্বপূর্ণ পদক্ষেপটি হল আপনার এক্সএএমপ্প বা ওয়্যাম্প পুনরায় চালু করা এবং ইউআরএলটির মতো অ্যাক্সেস করা http://projectname.localএবং আপনার লারভেল পাবলিক ইউআরএল ছাড়াই প্রতিক্রিয়া জানায়।


3) লারাভেলে কমান্ডটি চালিয়ে জনসাধারণকে সরান

আপনি যদি স্থানীয়ভাবে কাজ করে থাকেন তবে আপনার টার্মিনাল বা কমান্ড লাইন সরঞ্জাম থেকে নিম্নলিখিত কমান্ডটি চালানোর জন্য আপনাকে কিছু করার দরকার নেই। এর পরে, আপনি কমান্ড লাইনের মাধ্যমে প্রদত্ত ইউআরএল দ্বারা আপনার ওয়েবসাইট অ্যাক্সেস করতে পারেন।

   > php artisan serve

আপনি যদি নির্দিষ্ট আইপিতে আপনার প্রকল্পটি চালাতে ইচ্ছুক হন তবে আপনাকে নিম্নলিখিত কমান্ডটি চালানো দরকার। আপনি যদি ল্যানে কাজ করছেন তবে আপনি যদি অন্য লোককে স্থানীয় থেকে আপনার ওয়েবসাইট অ্যাক্সেস করার অনুমতি দিতে চান তবে আপনার আইপি ঠিকানাটি কমান্ড অনুসরণ করে চালানোর পরে "আইপকনফিগ" চালিয়ে আপনার আইপি ঠিকানাটি পরীক্ষা করতে হবে।

> php artisan serve --host=192.168.0.177

যদি আপনি নির্দিষ্ট বন্দর সহ কোনও আইপিতে আপনার প্রকল্পটি চালাতে ইচ্ছুক হন তবে আপনাকে নিম্নলিখিত কমান্ডটি করতে হবে।

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

4) হোস্ট করা সার্ভারে বা সিপ্যানেলে সর্বজনীন সরান

এখানে চিত্র বর্ণনা লিখুন

প্রকল্পটি শেষ হওয়ার পরে আপনাকে সার্ভারে প্রকল্পটি হোস্ট করতে হবে, তারপরে আপনাকে কেবল আপনার ডোমেনে ডকুমেন্টের রুটটিকে পাবলিক ফোল্ডারে সেট করতে হবে। নীচের স্ক্রিনশট চেক করুন।

স্ক্রিনশট অনুসারে যদি আপনার পাবলিক_এইচটিএমএলে কোনও প্রজেক্ট ফোল্ডার না থাকে তবে আপনার ঠিক আপনার ডকুমেন্টের রুটটি সেট করা দরকার "public_html/public"

রেফারেন্স এখান থেকে নেওয়া


1
চারটি উপায়ই ভাল তবে আমি প্রথম সমাধানটি ব্যবহার করে আমার সমস্যাটি সমাধান করেছি।
মনীষা

7

আমি @ হাম্বল লার্নারকে যুক্ত করতে চাই এবং নোট করব যে সম্পদের জন্য ইউআরএল পথটি "ঠিক" করার সঠিক অবস্থানটি হ'ল / ইলুমিনেট / রুটিং / ইউরলজিনেটর.এফপি / অ্যাসেট ()।

মেলে পদ্ধতিটি আপডেট করুন:

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

এক্সএএমপিপি ব্যবহারকারী লারভেল ডিফল্ট ফাইল সিস্টেমটিকে স্পর্শ না করেই url থেকে সর্বজনীন সরানোর জন্য আপনার অ্যাপ্লিকেশনটির জন্য ভার্চুয়াল হোস্ট সেট করতে হবে এই কাজটি করার জন্য এই পদক্ষেপগুলি অনুসরণ করুন

  1. এক্সএএমপিপি নিয়ন্ত্রণ প্যানেল অ্যাপ্লিকেশনটি খুলুন এবং অ্যাপাচি বন্ধ করুন stop সচেতন থাকুন যে দেরিতে উইন্ডোজ মেশিনগুলি এটি পরিষেবা হিসাবে চালাতে পারে, তাই অ্যাপাচি মডিউলটির বাম দিকে বাক্সটি চেক করুন।

  2. C:/xampp/apache/conf/extraআপনার এক্সএএমপিপি ফাইলগুলি অবস্থিত বা যেখানেই নেভিগেট করুন ।

  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. আপনার ভার্চুয়াল হোস্ট ডিরেক্টরিগুলি যুক্ত করতে এখন আপনি নীচের কোডটি অনুলিপি এবং পেস্ট করতে পারেন। উদাহরণস্বরূপ আমি ইটারি ইঞ্জিন নামে একটি সাইটে কাজ করছি যাতে নিম্নলিখিত স্নিপেটটি আমাকে আমার স্থানীয় ইনস্টল-এ সাব-ডোমেনগুলির সাথে কাজ করার অনুমতি দেবে:
<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 সম্পাদনা করতে আপনার উইন্ডোজ হোস্ট ফাইলের পরের দিকে। ফাইলটি অবস্থিত হবেC:/Windows/System32/drivers/etc/hosts সেখানে , যেখানে হোস্টগুলি ফাইল। এটি নোটপ্যাড দিয়ে খুলুন।
  2. #Localhost নামের রেজোলিউশনটি ডিএনএসের মধ্যেই পরিচালিত হবে।

127.0.0.1 localhost

লোকালহোস্ট নামের রেজোলিউশনটি ডিএনএসের মধ্যেই পরিচালিত হয়।

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

লারাভেল সেটআপে সর্বদা সর্বজনীন ফোল্ডার থাকার কারণ রয়েছে, সমস্ত পাবলিক সম্পর্কিত জিনিসগুলি পাবলিক ফোল্ডারের ভিতরে উপস্থিত থাকতে হবে,

লারাভেলের মূল ফোল্ডারে আপনার আইপি ঠিকানা / ডোমেনটিকে নির্দেশ করবেন না তবে এটি সর্বজনীন ফোল্ডারে দেখান। এটি সার্ভার আইপিকে মূল ফোল্ডারে দেখায় এটি অনিরাপদ because কারণ আপনি যদি সীমাবদ্ধতা না লিখে থাকেন তবে .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

প্রথমবারের মতো ল্যারাভেল ইনস্টল করার পরে, আমি বিখ্যাত "পাবলিক ফোল্ডার সমস্যা" এর মুখোমুখি হয়েছি এবং আমি এই সমাধানটি নিয়ে এসেছি যা আমার ব্যক্তিগত মতামত অনুসারে , "ক্লিনার" তখন ওয়েবে পাওয়া অন্যদের found


কৃতিত্ব

  • নেই publicকোনো URI শব্দ
  • উত্সাহী .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. আপনার লারাভেল রুট ফোল্ডারে ইনডেক্স.এফপিতে সার্ভার.এফপি নামকরণ করুন

2. / পাবলিক ডিরেক্টরি থেকে .htaccess ফাইলটি আপনার লারাভেল রুট ফোল্ডারে অনুলিপি করুন।

উত্স: https://stackoverflow.com/a/28735930

আপনি এই পদক্ষেপগুলি অনুসরণ করার পরে আপনার সমস্ত সিএসএস এবং স্ক্রিপ্টের পথ পরিবর্তন করতে হবে তবে এটি ক্লান্তিকর হবে।

সমাধান প্রস্তাব : খালি আপনি 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: কোনও মূল ফাইল কখনও সম্পাদনা করবেন না। যদি এটি এখন সহজ এবং সুন্দর দেখাচ্ছে তবে আপনি পরে প্রদান করবেন।
জনাকা ডোম্বাওয়েলা

@ জনাকাডোম্বাওলা আমি সেভাবে ভাবি না কারণ:
ফেরহাট কোয়ার

@ জনাকাডোম্বাওলা আমি সেভাবে ভাবি না কারণ: সেনেরিও 1: বিকাশকারী যদি একজন অভিজ্ঞ: ওপেন সোর্স কোড এই কাজের জন্য হয় সেনেরিও 2: বিকাশকারী যদি জুনিয়র হন তবে ডেভেলপারকে অবশ্যই অভিজ্ঞতা অর্জনের জন্য উত্স কোডে সম্পাদনা করতে হবে
ফেরাহাট কোয়ার

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>

এর সাথে মোড_রাইট মডিউলটি সক্রিয় করুন

sudo a2enmod rewrite

এবং অ্যাপাচি পুনরায় চালু করুন

sudo service apache2 restart

.Htaccess ফাইলগুলি (যা একটি খুব সাধারণ ব্যবহারের ক্ষেত্রে) এর মধ্যে থেকে মোড_উইরাইট ব্যবহার করতে, এর মাধ্যমে ডিফল্ট ভার্চুয়ালহোস্ট সম্পাদনা করুন

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

"ডকুমেন্টরুট / ভেরি / www / এইচটিএমএল" এর নীচে নিম্নলিখিত লাইনগুলি যুক্ত করুন:

<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 পরিবর্তন করার জন্য একটি দ্রুত ফিক্স করেছি: সার্ভার.এফপি অনুলিপি করার পরে সূচি.এফপি এইচ।

<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

সমস্যাটি হ'ল যদি আপনি টাইপ / পাবলিক করেন এবং এটি এখনও ইউআরএলে উপলব্ধ হবে, এর জন্য আমি একটি ফিক্স তৈরি করেছি যা পাবলিক / ইনডেক্স.এফপি স্থাপন করা উচিত

  $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;
   }}

কোডের এই শান্তি ইউআরএল থেকে পাবলিক অপসারণ করবে এবং একটি 404 দেবে এবং তারপরে জনসাধারণ ব্যতীত ইউআরএলে পুনঃনির্দেশ করবে


0

আমি যে অন্য পদ্ধতিটি ব্যবহার করি তা হ'ল hdococs বা www এ ln কমান্ড ব্যবহার করে একটি প্রতীকী লিঙ্ক তৈরি করা (লিনাক্সে, উইন সম্পর্কে জানেন না) অর্থাৎ ln projectname/public project লোকালহোস্ট / প্রকল্পের মাধ্যমে সাইটটি অ্যাক্সেসযোগ্য


0

আপনি url থেকে বিভিন্ন পদ্ধতি ব্যবহার করে পাবলিক কীওয়ার্ড সরিয়ে ফেলতে পারেন।

1) আপনি যদি ডেডিকেটেড হোস্টিং ব্যবহার করছেন এবং আপনার রুট অ্যাক্সেস রয়েছে তবে আপনি ভার্চুয়াল হোস্ট ব্যবহার করে ইউআরএল থেকে পাবলিক কীওয়ার্ডটি সরিয়ে ফেলতে পারেন। আপনার পাবলিকের সাথে ডকুমেন্টরুট পাথ দেওয়া উচিত। সুতরাং এটি সর্বজনীন ডিরেক্টরি থেকে সূচী শুরু করবে এবং এটি 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>

এটি আমাকে / সর্বজনীন / সর্বজনীন
জেন্ডারওয়ার

@ আজারডোয়ার, দয়া করে লারাভেল সংস্করণটি কী? এছাড়াও, আমি আশা করি আপনি মূল ডিরেক্টরি থেকে একটি উপ ডিরেক্টরিতে আপনার প্রকল্প নেই?
ভিক্টর ইফানিয়েই ইজিওগু

প্রকল্পটি মূল, সংস্করণ 5.6 * * - যদিও এটি সাবডোমেনে রয়েছে, ভাগ করা হোস্টিংয়ের ক্ষেত্রে; দুর্ভাগ্যক্রমে এই সিপ্যানেল ইনস্টলেশনটি সাবডোমেনগুলিকে
পাবলিক_এইচটিএমএল-এর
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.