これは非常によく知られた質問ですが、Laravel 5.のための実用的な解決策を見つけることができませんでした。私は長い間Codeigniterから移行しようとしてきました。私を先送りにします。
私はVMを実行したくありません、これはプロジェクトを切り替えるときにぎこちないようです。
私は自分のドキュメントルートをパブリックフォルダに設定したくありません。これはプロジェクトを切り替えるときにも面倒です。
私は.htaccess mod_rewriteメソッドを試してみました
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^(.*)$ public/$1 [L]
</IfModule>
これは、compile.php 7610行目で、Laravel NotFoundHttpExceptionを返すだけです。
しばらく前にL4を試したとき、パブリックフォルダの内容をルートに移動する方法を使用しました。 L5の構造はかなり異なり、同じステップに従うとLaravelが完全に壊れました(サーバーは空白のページのみを返します)。
次のような開発環境で「public」を削除するための適切な方法はありますか。
ありがとう
** MAMPとPHP 5.6.2を使用しています
server.php
をindex.php
に名前変更します.htaccess
ディレクトリから/public
ファイルをLaravelルートフォルダにコピーします。それでおしまい!
私は2つの答えを使って問題を解決しました:
以下のように静的に.htaccessを少し変更します。
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]
他に 静的ファイル が必要な場合は、前の宣言リストに拡張子を追加するだけです。
Laravel 5.5に、ルートディレクトリに.htaccessファイルを作成し、次のコードを配置します。 - Reference Link
<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>
Laravel 5のURLから一般公開を削除する簡単な方法。あなたはただpublicディレクトリからindex.phpと.htaccessを切り取り、それを全てrootディレクトリに貼り付け、index.phpの2行を次のように置き換えるだけです。
require __DIR__.'/bootstrap/autoload.php';
$app = require_once __DIR__.'/bootstrap/app.php';
@ rimon.ekjonは言った:
Laravelルートフォルダのserver.phpの名前をindex.phpに変更し、.htaccessファイルを/ publicディレクトリからLaravelルートフォルダにコピーします。 - それでおしまい !! :)
それは私のために働いています。しかし、私はasset()ヘルパーを使用したため、/ publicディレクトリ内のすべてのリソースファイルが見つからず、URLを要求することもできませんでした。
/Illuminate/Foundation/helpers.php/asset()関数を次のように変更しました。
function asset($path, $secure = null)
{
return app('url')->asset("public/".$path, $secure);
}
今、すべてうまくいく:)
@ rimon.ekjon、そしてみなさんありがとうございます。
1) L5 にパブリックディレクトリを移動するための実用的な方法が見つかりませんでした。ブートストラップindex.php
でいくつかのことを変更することができますが、いくつかのヘルパー関数はそのパブリックディレクトリがそこにあるという仮定に基づいているようです。正直なところ、あなたは本当にパブリックディレクトリを移動してはいけません。
2) _ mamp _ を使用している場合は、プロジェクトごとに新しい仮想ホストを作成し、それぞれがそのプロジェクトのパブリックディレクトリを提供するようにします。作成したら、次のように定義済みのサーバー名で各プロジェクトにアクセスします。
http://project1.dev
http://project2.dev
ルートに .htaccess fileを作成してこれらの行を追加するだけです。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^(.*)$ public/$1 [L]
</IfModule>
それでおしまい!
上記のコードは、ルートのpublic_htmlフォルダに対して機能します。あなたのディレクトリがpublic_html/laravelapp/publicのように見えていて、あなたがlaravelappの中に上記のコードを入れているならば、あなたのコアlaravelファイルはpublic_htmlフォルダの中にあるべきであると言った。したがって、すべてのコアファイルをpublic_htmlにコピーして、そこに.htaccessファイルを配置する必要があります。
あなたがサブディレクトリにコードを保存したいなら、あなたはサブドメインを作成することができます、そしてこのコードはそれのために働くでしょう。
Laravel5の public urlを削除することは可能です。次の手順を実行します:
ステップ1. public からすべてのファイルをコピーし、 root ディレクトリに貼り付けます
ステップ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';
そして、すべてのキャッシュとクッキーを削除してください。
他のすべてのファイルとディレクトリを 'locale'という名前のフォルダに置いたとしましょう。
Index.phpに行き、次の2行を見つけてください。
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';
本当にお勧めしません Laravelルートフォルダのserver.php
をindex.php
に変更し、.htaccess
ディレクトリからLaravelルートフォルダに/public
ファイルをコピーします。
これにより、誰もがあなたのファイルのいくつかにアクセスすることができます(例えば.env
)。試してみてください。あなたはそれが欲しくありません!
代わりに、このようにあなたのルートに.htaccess
ファイルを作成するべきです:
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/public/
RewriteRule ^(.*)$ /public/$1 [L,QSA]
これはあなたのすべてのベースURIを/public
フォルダに静かに書き換えます。 HTTP:Authorization
とURIのパラメータでさえ黙って/public
フォルダに渡されます。
それでおしまい!
BESTアプローチ: publicを削除することをお勧めしません。代わりに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
を使用します。その理由は、あなたの全体のlaravelコードはあなたのパブリックディレクトリにその1つ下のレベルなので安全になるでしょう:)
server.php
をindex.php
に名前変更しただけでうまくいきます。
これは、すべてのlaravelバージョンに適しています...
これが私のディレクトリ構造です。
/laravel/
... app
... bootstrap
... public
... etc
次の簡単な手順に従ってください
_ dir _ 。 '/ ../bootstrap/autoload.php';
に
_ dir _ 。 '/ bootstrap/autoload.php';
そして
$ app = require_once _ dir _ 。 '/ ../bootstrap/start.php';
に
$ app = require_once _ dir _ 。 '/ bootstrap/start.php';
'public' => _ dir _ 。 '/ ../public'、
に
'public' => _ dir _ 。 '/ ..'、
これで終わりです。今度はhttp:// localhost/laravel /を試してください。
これは私のために働く最善と最短の解決策です may、2018年Laravel 5.5
.htaccess
ファイルを /public ディレクトリから root ディレクトリに切り取り、その内容を次のコードに置き換えます。
<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>
.htaccess
ファイルを保存するだけでそれがすべてです。
server.php
ファイルの名前をindex.php
に変更します。それがすべてです お楽しみください!
@Humble Learnerに追加し、資産のURLパスを「修正」する適切な場所は/Illuminate/Routing/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, '/');
}
これにより、スクリプト、スタイル、および画像パスが修正されます。資産パスのための何でも。
XAMPPユーザーがlaravelのデフォルトのファイルシステムに触れずにURLからpublicを削除するには、このjsutを実行するようにアプリケーションの仮想ホストを設定します。
XAMPPコントロールパネルアプリケーションを開き、Apacheを停止します。最近のWindowsマシンではサービスとして実行される可能性があるため、Apacheモジュールの左側にあるチェックボックスをオンにします。
C:/xampp/Apache/conf/extra
またはXAMPPファイルがある場所に移動します。
テキストエディタでhttpd-vhosts.confという名前のファイルを開きます。
行19の周りで#NameVirtualHost *:80
を見つけて、そのハッシュをコメント解除するか削除してください。
ファイルの一番下に、次のコードを貼り付けます。
<VirtualHost *>
ServerAdmin [email protected]
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>
<VirtualHost eateryengine.dev>
ServerAdmin [email protected]
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>
C:/Windows/System32/drivers/etc/hosts
に配置されます。ここで、hostsはファイルです。メモ帳で開きます。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.
元の記事を見つけることができます ここ
Laravel設定にパブリックフォルダを置く理由は常にあります。パブリック関連のものはすべてパブリックフォルダ内に存在する必要があります。
あなたのIPアドレス/ドメインをLaravelのルートフォルダに向けないで、パブリックフォルダに向けないでください。
.htaccess
に制限を記述しない限り、他のファイルに簡単にアクセスできるため、サーバーIpがルートフォルダーを指すのは危険です。
.htaccess
ファイルに書き換え条件を書き込んで書き換えモジュールをインストールして書き換えモジュールを有効にするだけで、経路に公になる問題が解決されます。
root ディレクトリに.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>
<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
そしてApacheを再起動します
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
私は以前にいくつかの記事を読んだことがあります、そしてそれはうまくいっていますが、本当に安全かどうかわからない
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';
まず、あなたはこのステップを使うことができます
Laravel 5の場合:
1. Laravelルートフォルダのserver.phpの名前をindex.phpに変更します。
2. .htaccessファイルを/ publicディレクトリからLaravelルートフォルダにコピーします。
出典: https://stackoverflow.com/a/28735930
これらの手順に従った後は、すべてのCSSとスクリプトパスを変更する必要がありますが、これは面倒です。
解決策の提案 :単にhelpers::asset
関数をマイナーチェンジすることができます。
このために :
vendor\laravel\framework\src\Illuminate\Foundation\helpers.php
を開く
後藤線130
"public/".$path
の代わりに$path
を書く、
function asset($path, $secure = null){
return app('url')->asset("public/".$path, $secure);
}
問題は、/ publicと入力してもURLで使用できる場合、public/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にリダイレクトします
私が使用する別の方法は、htdocsまたはwww i.e. ln projectname/public project
のlnコマンドを使用してシンボリックリンクを作成することです(Linuxでは、Winについては知りません)
初めてLaravelをインストールした後、私は有名な "パブリックフォルダの問題"に直面しました、そして私は私の個人的な意見では他のものより "私は"この解決策を思いつきましたWeb上で見つかりました。
public
という単語を含めないでください.env
ファイルを不審な人々から保護する.htaccess
と4つの簡単なルールを使ってmod_rewrite
を編集するだけですべてができます。
.htaccess
にpublic/.htaccess
ファイルを移動します私はすべてにコメントしたので、mod_rewrite
を一度も使ったことがない人にも明らかになるべきです(私は専門家ではない、まったく反対です)。また、規則を理解するために、Laravelでは、Billがhttps://example.com
に接続すると、https://example.com/index.php
がロードされることを明確にしなければなりません。このファイルには、要求をhttps://example.com/public/index.php
に送信するコマンドheader("refresh: 5; https://example.com/public/")
が含まれています。この2番目の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
内)は削除することができます。実際、同じ規則が最後の2つの規則の中でより詳細に説明されています。
# Handle Front Controller...
# RewriteCond %{REQUEST_FILENAME} !-d
# RewriteCond %{REQUEST_FILENAME} !-f
# RewriteRule ^ index.php [L]
EDIT:私は逃した Abhinav Saraswatの解決策 そして彼の答えは受け入れられたものであるべきです。ファイルを変更せずにすべてのトラフィックをパブリックフォルダにリダイレクトする、1つの単純で明確な規則。
URLから一般公開を削除する4つの最良の方法。
URLから一般公開を削除するのに他のトリックを使用した場合は、server.phpの名前をindex.phpに変更し、コアファイルパスに変更します。明らかに、そうしないでください。それではなぜそれを行うのが適切な方法ではないのでLaravelがこのような解決策を与えないのですか。
1)Laravel でhtaccessを使用してURLからpublicを削除します
.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)ローカルに仮想ホストを作成して一般公開を解除する
ここではWindowオペレーティングシステムのデモをしています。しかし、私は誰でも簡単にステップに従うことができるようにステップを定義しようとします。特定のオペレーティングシステムについても同様にGoogleで調査することができます。
ステップ1: C:¥Windows¥system32¥drivers¥etc¥に移動し、「hosts」ファイルを管理者モードで開きます。
ステップ2: 以下のコードを追加してください。ここで、私はあなたにprojectname.localドメイン名demoのデモを与えています、あなたはあなたが好きなようにあなたが指定することができます。どこでも一定にしてください。
127.0.0.1 projectname.local
ステップ3: xamppユーザーとampユーザーのC:\xampp\Apache\conf\extra
の"C:\wamp\bin\Apache\Apache2.4.4\conf\extra"
に行き、"httpd-vhosts.conf"
ファイルを開きます。次のコードを追加してください。
Notes:プロジェクトに従ってドキュメントルートを変更すると、定義したドメイン名も "hosts"ファイルに追加されます。
<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を再起動してhttp://projectname.local
のようなURLにアクセスすることです。あなたのLaravelはパブリックURLなしで応答します。
3)Laravel でコマンドを実行して一般公開を解除します
あなたがローカルで作業しているなら、あなたは何もする必要はありませんあなたの端末またはコマンドラインツールから以下のコマンドを実行するだけでよいです。その後、あなたはコマンドラインで提供されたURLであなたのウェブサイトにアクセスすることができます。
> php artisan serve
あなたが特定のIPであなたのプロジェクトを実行しても構わないと思っているなら、あなたは以下のコマンドを実行する必要があります。あなたがLANで作業しているならば、あなたが他の人にあなたのウェブサイトにローカルからアクセスさせたいならばあなたはあなたのIPアドレスをコマンドに従って走らせた後に "ipconfig"を実行することによってコマンドラインを使ってあなたのIPアドレスをチェックする必要があります。
> php artisan serve --Host=192.168.0.177
特定のポートを使用して特定のIPでプロジェクトを実行したい場合は、次のコマンドを実行する必要があります。
> php artisan serve --Host=192.168.0.177 --port=77
4)ホストされているサーバーまたはcpanelのパブリックを削除します
プロジェクトが完了したら、サーバーでプロジェクトをホストする必要があります。次に、ドメインのドキュメントルートをパブリックフォルダに設定するだけです。下のスクリーンショットを確認してください。
スクリーンショットのとおり、public_htmlにプロジェクトフォルダがない場合は、ドキュメントルートを"public_html/public"
のように設定するだけです。
たとえLaravelをルートフォルダに置くことをお勧めしないとしても、回避できない場合があります。そのような場合、上記の方法はアセットでは動作しないので、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>
誰もがそれをアップグレードして大歓迎ですので、これは私がしなければならなかった迅速な修正でした。
たった2つのステップに従うことができます。
public
フォルダーから.htaccess
を切り取り、ルート(メインフォルダー)に貼り付けますserver.php
ファイルの名前をindex.php
に変更します。 (メインフォルダ)ルートディレクトリに.htaccessファイルを作成し、以下を貼り付け/保存するだけで、多くの作業を行う必要はありません。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^(.*)$ public/$1 [L]
</IfModule>
これらの行をあなたのroot htaccessフォルダに追加してください。これはRewriteCond上でRewriteEngineというジョブを実行します%{REQUEST_URI}!public/RewriteRule(。*)/ public/$ 1 [L]
私はここでいくつかの解決策を試してみたし、このようにlaravel 5.2のために働くhtaccessを見つけた:
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]
あなたはさまざまな方法を使用してURLから公開キーワードを削除することができます。
1)専用ホスティングを使用していて、rootアクセス権がある場合は、仮想ホストを使用してURLからpublicキーワードを削除できます。あなたはpublicでDocumentRootパスを与えるべきです。だからこれは、パブリックディレクトリからインデックスを開始し、URLからそれを削除します。
<VirtualHost *:80>
ServerAdmin [email protected]
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>
あなたはより多くの reference をここで得ることができます。
ステップ1: rootディレクトリの/ server.php
ファイルの名前をindex.php
に変更
ステップ2: .htaccess
ファイルを/public
ディレクトリからルートディレクトリにコピーする
私はこの問題に対する最も有効な解決策を見つけました。
root フォルダーにある.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>