Saya tahu ini adalah pertanyaan yang sangat populer tetapi saya belum dapat menemukan solusi yang berfungsi untuk Laravel 5. Saya telah mencoba bermigrasi dari Codeigniter untuk waktu yang lama, tetapi proses instalasi yang berbelit-belit ini membuat saya tetap kesal.
Saya tidak ingin menjalankan VM, ini hanya terasa canggung ketika beralih antar proyek.
Saya tidak ingin mengatur root dokumen saya ke folder publik, ini juga canggung ketika beralih antar proyek.
Saya sudah mencoba metode .htaccess mod_rewrite
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^(.*)$ public/$1 [L]
</IfModule>
Ini hanya memberi saya Laravel NotFoundHttpException di baris compiled.php 7610.
Ketika saya mencoba L4 beberapa waktu lalu, saya menggunakan metode memindahkan isi folder publik ke root. Struktur L5 sangat berbeda dan mengikuti langkah yang sama benar-benar memecah Laravel (server hanya akan mengembalikan halaman kosong).
Apakah ada metode yang layak untuk menghapus 'publik' di lingkungan pengembangan yang:
- Bekerja dengan L5
- Mengizinkan saya beralih antar proyek dengan mudah (Saya biasanya mengerjakan 2 atau 3 pada satu waktu).
Terima kasih
** Saya menggunakan MAMP dan PHP 5.6.2
Jawaban:
Untuk Laravel 5:
server.php
di folder root Laravel Anda menjadiindex.php
.htaccess
file dari/public
direktori ke folder root Laravel Anda.Itu dia!
sumber
.env
file Anda jika Anda melakukan ini kecuali Anda<Files "log.txt">Order Allow,DenyDeny from all</Files>
menyelesaikan masalah yang Anda atasi . Apakah sekarang aman atau ada risiko lain?log.txt
. Pastikan Anda memblokir data sensitif dari publik. Jika Anda menggunakan Laravel dan membaca dokumentasi dengan seksama , webroot Anda akan terlihat sepertiproject/public
. Lihat diskusi stackoverflow ini qa . Atur server web Anda dan coba untukhttps://example.com/.env
berjaga-jaga. Jika Anda melihat kata sandi Anda, pertimbangkan semua yang dikompromikan dan ubah semua kata sandi.Saya telah memecahkan masalah menggunakan 2 jawaban:
Mengubah .htaccess sedikit sebagai berikut untuk statika:
Jika ada file statis lain yang diperlukan, cukup tambahkan ekstensi ke daftar yang dinyatakan sebelumnya
sumber
RewriteRule ^.env - [F,L,NC]
<Files ~ "\.env$"> Order allow,deny Deny from all </Files>
Di Laravel 5.5, buat file .htacess di direktori root Anda dan tempatkan kode berikut: - Tautan Referensi
sumber
RewriteRule ^ ^$1 [N
] lakukan?JANGAN!
ANDA BENAR-BENAR TIDAK HARUS mengganti nama
server.php
di folder root Laravel Andaindex.php
dan menyalin.htaccess
file dari/public
direktori ke folder root Laravel Anda !!!Dengan cara ini setiap orang dapat mengakses beberapa file Anda (
.env
misalnya). Cobalah sendiri. Anda tidak menginginkan itu!MELAKUKAN
Sebagai gantinya, Anda harus membuat
.htaccess
file di root Anda seperti ini:Ini akan secara diam-diam menulis ulang semua URI dasar Anda ke
/public
folder. Bahkan semua Header , misalnya Header Otorisasi HTTP , dan semua parameter URI opsional diam-diam akan diteruskan ke/public
folder juga.Itu saja
Harap dicatat ketika menyiapkan proyek Laravel dengan Docker: Anda tidak perlu melakukan ini.
sumber
Cara mudah untuk menghapus publik dari laravel 5 url. Anda hanya perlu memotong index.php dan .htaccess dari direktori publik dan menempelnya di direktori root, itu saja dan ganti dua baris di index.php sebagai
Catatan : Metode di atas hanya untuk pemula karena mereka mungkin menghadapi masalah dalam mengatur virtual host dan Solusi terbaik adalah men-setup virtual host di mesin lokal dan arahkan ke direktori publik proyek.
sumber
@ rimon.ekjon berkata:
Itu bekerja untuk saya. Tetapi semua file sumber daya di direktori / publik tidak dapat menemukan dan meminta url tidak berfungsi, karena saya menggunakan pembantu aset ().
Saya mengubah fungsi /Illuminate/Foundation/helpers.php/asset () sebagai berikut:
Sekarang semuanya bekerja :)
Terima kasih @ rimon.ekjon dan kalian semua.
sumber
RewriteRule ^(.*)$ public/$1 [L]
file .htaccess Anda yang telah Anda salin dari direktori publik, dengan menghapus baris iniRewriteRule ^(.*)/$ /$1 [L,R=301]
Cukup buat file .htaccess di root dan tambahkan baris ini ke sana
Itu dia!
Kode di atas berfungsi pada folder root public_html. Setelah mengatakan bahwa file inti inti Anda harus berada di dalam folder public_html, jika direktori Anda terlihat seperti public_html / laravelapp / publik dan jika Anda memasukkan kode di atas di dalam laravelapp itu tidak akan berfungsi. Karena itu Anda harus menyalin semua file inti Anda ke public_html dan meletakkan file .htaccess di sana.
Jika Anda ingin menyimpan kode dalam subdirektori maka Anda dapat membuat subdomain maka kode ini juga akan berfungsi untuk itu.
sumber
Buat
.htaccess
file di direktori root dan tempatkan kode seperti di bawah ini.sumber
1) Saya belum menemukan metode kerja untuk memindahkan direktori publik di L5 . Meskipun Anda dapat memodifikasi beberapa hal di bootstrap
index.php
, tampaknya beberapa fungsi pembantu didasarkan pada asumsi bahwa direktori publik berada di sana. Sejujurnya Anda benar-benar tidak boleh memindahkan direktori publik.2) Jika Anda menggunakan MAMP maka Anda harus membuat vhost baru untuk setiap proyek, masing-masing melayani direktori publik proyek tersebut. Setelah dibuat, Anda mengakses setiap proyek dengan nama server yang ditentukan seperti ini:
sumber
Mungkin untuk menghapus url publik di laravel5. Ikuti langkah ini:
langkah 1. copy semua file dari publik dan rekatkan pada direktori root
langkah 2. buka
index.php
file ganti denganuntuk
dan
untuk
Dan hapus semua cache dan cookie.
sumber
Katakanlah Anda meletakkan semua file dan direktori lain di folder bernama 'lokal'.
Buka saja index.php dan temukan dua baris ini:
dan mengubahnya menjadi ini:
sumber
Berikut ini adalah solusi terbaik dan terpendek yang bekerja untuk saya pada Mei, 2018 untuk Laravel 5.5
cukup potong
.htaccess
file Anda dari direktori / publik ke direktori root dan ganti kontennya dengan kode berikut:Cukup simpan
.htaccess
file dan itu saja.Ganti nama
server.php
file Anda menjadiindex.php
. itu semua nikmati!sumber
Pendekatan TERBAIK: Saya tidak akan merekomendasikan menghapus publik, sebagai gantinya
on local computer create a virtual host point to public directory
danon remote hosting change public to public_html and point your domain to this directory
. Alasannya, seluruh kode laravel Anda akan aman karena satu tingkat di bawah ke direktori publik Anda :)METODE 1:
Saya hanya mengganti nama
server.php
menjadiindex.php
dan berfungsiMETODE 2:
Ini bekerja dengan baik untuk semua versi laravel ...
Berikut adalah Struktur Direktori saya,
Ikuti langkah-langkah mudah ini
untuk
dan
untuk
untuk
dan itu saja, sekarang coba http: // localhost / laravel /
sumber
4 cara terbaik untuk menghapus publik dari URL.
Jika Anda menggunakan trik lain untuk menghapus publik dari URL seperti mengubah nama server.php menjadi index.php dan mengubah ke jalur file inti. Jelas, jangan lakukan itu. Lalu mengapa Laravel tidak memberikan solusi seperti ini karena itu bukan cara yang tepat untuk melakukan itu.
Dengan menambahkan file .htaccess ke root, Anda dapat mengakses situs web tanpa publik
Saya memberikan demo di sini untuk sistem operasi Window. Tetapi saya akan mencoba mendefinisikan langkah agar siapa pun dapat dengan mudah mengikuti langkah itu. Anda juga dapat melakukan riset di google untuk hal yang sama untuk sistem operasi tertentu.
Langkah 1: Buka C: \ Windows \ system32 \ drivers \ etc \ buka file "hosts" dalam mode Administrator.
Langkah 2: Tambahkan kode berikut ke dalamnya. Di sini, saya memberi Anda demo demo nama domain projectname.local, Anda dapat menentukan yang Anda inginkan. Jadikan itu konstan di setiap tempat.
Langkah 3: Sekarang pergi ke,
C:\xampp\apache\conf\extra
untuk pengguna xampp dan untuk pengguna wamp"C:\wamp\bin\apache\Apache2.4.4\conf\extra"
dan buka"httpd-vhosts.conf"
file. Sekarang tambahkan kode berikut ke dalamnya.Catatan: Ubah root Dokumen sesuai proyek Anda juga tambahkan nama domain saat Anda mendefinisikan ke dalam file "host".
Langkah 4: Terakhir tetapi langkah penting adalah memulai kembali Xampp atau Wamp Anda dan mengakses url like
http://projectname.local
dan Laravel Anda akan merespons tanpa URL publik.Jika Anda bekerja di lokal maka Anda tidak perlu melakukan apa pun hanya perlu menjalankan perintah berikut dari terminal atau alat baris perintah Anda. Setelah itu, Anda dapat mengakses situs web Anda dengan URL yang disediakan oleh baris perintah.
Jika Anda bersedia untuk menjalankan proyek Anda pada IP tertentu maka Anda perlu menjalankan perintah berikut. Jika Anda bekerja pada LAN maka jika Anda ingin orang lain mengakses situs web Anda dari lokal maka Anda hanya perlu memeriksa alamat IP Anda menggunakan baris perintah dengan menjalankan "ipconfig" setelah menjalankan alamat IP Anda mengikuti perintah.
Jika Anda ingin menjalankan proyek Anda pada IP tertentu dengan port tertentu maka Anda perlu perintah berikut.
Setelah menyelesaikan proyek Anda perlu meng-host proyek di server, maka Anda hanya perlu mengatur root dokumen di domain Anda ke folder publik. Periksa tangkapan layar di bawah ini.
Sesuai tangkapan layar jika Anda tidak memiliki folder proyek ke dalam public_html maka Anda hanya perlu menyetel seperti root dokumen Anda
"public_html/public"
.Referensi diambil dari sini
sumber
Saya ingin menambahkan ke @Humble Learner dan perhatikan bahwa lokasi yang tepat untuk "memperbaiki" jalur url untuk aset adalah /Illuminate/Routing/UrlGenerator.php/asset ().
Perbarui metode untuk mencocokkan:
Ini akan memperbaiki skrip, gaya, dan jalur gambar. Apa pun untuk jalur aset.
sumber
Untuk pengguna XAMPP untuk menghapus publik dari url tanpa menyentuh sistem file default laravel adalah dengan menetapkan Host Virtual untuk aplikasi Anda untuk melakukan ini hanya ikuti langkah-langkah ini
Buka aplikasi panel kontrol XAMPP dan hentikan Apache. Ketahuilah bahwa mesin Windows yang terlambat mungkin menjalankannya sebagai layanan, jadi centang kotak di sebelah kiri modul Apache.
Arahkan ke
C:/xampp/apache/conf/extra
atau di mana pun file XAMPP Anda berada.Buka file bernama httpd-vhosts.conf dengan editor teks.
Sekitar baris 19 temukan #
NameVirtualHost *:80
dan batalkan komentar atau hapus hash.Di bagian paling bawah file tempel kode berikut:
C:/Windows/System32/drivers/etc/hosts
, di mana host adalah file. Buka dengan notepad.127.0.0.1 localhost
resolusi nama localhost ditangani dalam DNS itu sendiri.
Artikel asli dapat ditemukan di sini
sumber
Selalu ada alasan untuk memiliki folder publik di pengaturan Laravel, semua barang terkait publik harus ada di dalam folder publik,
Cukup tulis kondisi penulisan ulang dalam
.htaccess
file dan instal modul penulisan ulang dan aktifkan modul penulisan ulang, masalah yang menambah publik di rute akan terpecahkan.sumber
Saya tahu bahwa ada banyak solusi untuk masalah ini. Solusi terbaik dan termudah adalah menambahkan file .htaccess di root direktori .
Saya mencoba jawaban yang kami berikan untuk masalah ini namun saya menghadapi beberapa masalah dengan auth: api guard di Laravel.
Inilah solusi yang diperbarui:
Buat file .htaccess di direktori root Anda dan tambahkan kode ini. Dan semuanya berjalan dengan baik
sumber
Laravel 5.5
Setelah menginstal Laravel untuk pertama kalinya, saya menghadapi "masalah folder publik" yang terkenal dan saya menemukan solusi ini yang, menurut pendapat pribadi saya , adalah "lebih bersih" daripada yang lain yang saya temukan di Web.
Prestasi
public
kata di URI.env
file dari orang yang ingin tahuSemuanya bisa dilakukan hanya dengan mengedit
.htaccess
penggunaanmod_rewrite
dan empat aturan sederhana.Langkah
.htaccess
file kepublic/.htaccess
dalam root utamaSaya berkomentar semuanya, jadi harus jelas (saya harap) juga untuk mereka yang tidak pernah menggunakan
mod_rewrite
(bukan bahwa saya seorang ahli, sebaliknya). Juga, untuk memahami aturan, harus jelas bahwa, di Laravel, jika Bill terhubunghttps://example.com
,https://example.com/index.php
dimuat. File ini hanya berisi perintahheader("refresh: 5; https://example.com/public/")
, yang mengirimkan permintaan kehttps://example.com/public/index.php
. Yang keduaindex.php
ini bertanggung jawab untuk memuat controller dan hal-hal lain.Aturan berikut (asal dalam
public/.htaccess
) dapat dihapus. Faktanya, aturan yang sama dijelaskan secara lebih rinci dalam dua aturan terakhir.EDIT: Saya ketinggalan solusi Abhinav Saraswat dan jawabannya harus diterima. Hanya satu, aturan sederhana dan jelas yang mengarahkan semua lalu lintas ke folder publik tanpa memodifikasi file apa pun.
sumber
Pertama, Anda bisa menggunakan langkah ini
sumber: https://stackoverflow.com/a/28735930
setelah Anda mengikuti langkah-langkah ini maka Anda perlu mengubah semua jalur css dan skrip, tetapi ini akan melelahkan.
Proposal Solusi : cukup Anda dapat melakukan sedikit perubahan pada
helpers::asset
fungsi.Untuk ini :
Buka
vendor\laravel\framework\src\Illuminate\Foundation\helpers.php
goto line 130
tulis
"public/".$path
alih-alih$path
,sumber
Aktifkan modul mod_rewrite dengan
dan restart apache
Untuk menggunakan mod_rewrite dari dalam file .htaccess (yang merupakan kasus penggunaan yang sangat umum), edit VirtualHost default dengan
Di bawah "DocumentRoot / var / www / html" tambahkan baris berikut:
Mulai ulang server lagi:
sumber
Saya telah membaca beberapa artikel sebelumnya dan berfungsi dengan baik tetapi benar-benar tidak tahu aman atau tidak
Edit index.php
untuk
sumber
Bahkan jika saya tidak merekomendasikan menempatkan Laravel di folder root ada beberapa kasus ketika itu tidak dapat dihindari; untuk kasus-kasus metode di atas tidak berfungsi untuk aset jadi saya membuat perbaikan cepat mengubah htaccess: setelah menyalin server.php ke index.php edit file .htaccess seperti:
Ini adalah perbaikan cepat yang harus saya lakukan sehingga siapa pun boleh meng-upgrade-nya.
sumber
Masalahnya adalah jika Anda mengetik / publik dan masih akan tersedia di url, karenanya saya membuat perbaikan yang harus ditempatkan di publik / index.php
kedamaian kode ini akan menghapus publik dari url dan akan memberikan 404 dan kemudian mengalihkan ke url tanpa publik
sumber
Metode lain yang saya gunakan adalah membuat tautan simbolik (di Linux, tidak tahu tentang Win) menggunakan perintah ln di htdocs atau www yaitu
ln projectname/public project
Situs ini dapat diakses melalui localhost / proyeksumber
Anda dapat menghapus kata kunci publik dari url menggunakan berbagai metode.
1) Jika Anda menggunakan hosting khusus dan Anda memiliki akses root, maka Anda dapat menghapus kata kunci publik dari url menggunakan Virtual Host. Anda harus memberikan jalur DocumentRoot dengan publik. Jadi ini akan memulai indeks dari direktori publik dan menghapusnya dari url.
2) Jika Anda tidak memiliki akses root hosting Anda maka Anda harus membuat file .htaccess baru di direktori root Anda dan meletakkan kode seperti di bawah ini
Anda bisa mendapatkan lebih banyak referensi di sini.
sumber
Buat file .htaccess di direktori root dan tempatkan kode seperti di bawah ini.
Buat file .htaccess di / direktori publik dan tempatkan kode seperti di bawah ini.
sumber
Saya menemukan solusi terbaik untuk masalah ini.
Edit saja
.htaccess
di folder root Anda dan tulis kode berikut. Tidak ada lagi yang dibutuhkansumber
Saya telah mencoba beberapa solusi di sini dan menemukan htaccess yang berfungsi untuk laravel 5.2, seperti ini:
ketika Anda memiliki file atau folder lain yang dilarang tambahkan saja
sumber
Anda tidak perlu berbuat banyak, cukup buat file .htaccess pada direktori root dan rekatkan / simpan di bawah ini;
sumber