use*_*360 215 php .htaccess mamp laravel laravel-5
我知道这是一个非常受欢迎的问题,但我无法为Laravel 5找到一个可行的解决方案.我一直在尝试从Codeigniter迁移很长一段时间,但这个错综复杂的安装过程一直让我失望.
我不想运行VM,这在项目之间切换时似乎很尴尬.
我不想将我的文档根目录设置为公共文件夹,这在项目之间切换时也很尴尬.
我试过了.htaccess mod_rewrite方法
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^(.*)$ public/$1 [L]
</IfModule>
Run Code Online (Sandbox Code Playgroud)
这只是在compiled.php第7610行中给了我一个Laravel NotFoundHttpException.
当我不久前尝试L4时,我使用了将公用文件夹的内容移动到根目录的方法.L5的结构完全不同,按照相同的步骤完全打破了Laravel(服务器只返回一个空白页面).
在开发环境中是否有一种很好的方法可以删除"公共":
谢谢
**我正在使用MAMP和PHP 5.6.2
Asf*_*mim 405
server.php在Laravel根文件夹中重命名为index.php.htaccess文件从/public目录复制到Laravel根文件夹.而已!
ka_*_*lin 117
我用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]
Run Code Online (Sandbox Code Playgroud)
如果需要任何其他静态文件,只需将扩展名添加到上一个声明的列表中
Rah*_*ham 69
在Laravel 5.5中,在根目录中创建.htacess文件,并放置以下代码: - 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>
Run Code Online (Sandbox Code Playgroud)
Muh*_*diq 42
从laravel 5 url中删除公众的简便方法.你只需要从公共目录中删除index.php和.htaccess并将其粘贴到根目录中,这就是所有并将index.php中的两行替换为
require __DIR__.'/bootstrap/autoload.php';
$app = require_once __DIR__.'/bootstrap/app.php';
Run Code Online (Sandbox Code Playgroud)
Mir*_*ron 37
@ rimon.ekjon说:
将Laravel根文件夹中的server.php重命名为index.php,并将.htaccess文件从/ public目录复制到Laravel根文件夹. - 而已 !!:)
这对我有用.但是/ public目录中的所有资源文件都找不到并且请求url不起作用,因为我使用了asset()帮助程序.
我更改了/Illuminate/Foundation/helpers.php/asset()函数如下:
function asset($path, $secure = null)
{
return app('url')->asset("public/".$path, $secure);
}
Run Code Online (Sandbox Code Playgroud)
现在一切正常:)
谢谢@ rimon.ekjon和你们所有人.
Der*_*man 37
您真的不应该server.php在Laravel根文件夹中重命名index.php
并将其.htaccess从/public目录复制到Laravel根文件夹中!!!
这样,每个人都可以访问您的某些文件(.env例如)。自己尝试。你不要那个!
相反,您应该.htaccess像这样在根目录中创建一个文件:
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/public/
RewriteRule ^(.*)$ /public/$1 [L,QSA]
Run Code Online (Sandbox Code Playgroud)
这将以静默方式将所有基本URI重写到该/public文件夹。甚至所有标头(例如HTTP Authorization Header)和所有可选的URI参数也将无提示地传递到该/public文件夹。
就这样!
Abh*_*wat 28
只需在root 创建.htaccess文件并将这些行添加到它
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^(.*)$ public/$1 [L]
</IfModule>
Run Code Online (Sandbox Code Playgroud)
而已!
上面的代码适用于root的public_html文件夹.说你的核心laravel文件应该在public_html文件夹中,如果你的目录看起来像public_html/laravelapp/public,如果你把上面的代码放在laravelapp中,它将无法工作.因此,您必须将所有核心文件复制到public_html中并将.htaccess文件放在那里.
如果要将代码保存在子目录中,则可以创建子域,然后此代码也适用于此.
Jer*_*fer 23
1)我还没有找到一种在L5中移动公共目录的工作方法.虽然你可以修改bootstrap中的一些东西index.php,但是看起来有几个辅助函数是基于公共目录存在的假设.老实说,你真的不应该移动公共目录.
2)如果您使用MAMP,那么您应该为每个项目创建新的vhost,每个项目都是项目公共目录.创建后,您可以按定义的服务器名称访问每个项目,如下所示:
http://project1.dev
http://project2.dev
Run Code Online (Sandbox Code Playgroud)
Pal*_*gar 16
.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>
Run Code Online (Sandbox Code Playgroud)
小智 15
可以删除laravel5 中的公共 URL.跟着这些步骤:
步骤1.从公共中复制所有文件并粘贴到根目录
步骤2.打开index.php文件替换
require __DIR__.'/../bootstrap/autoload.php';
Run Code Online (Sandbox Code Playgroud)
至
require __DIR__.'/bootstrap/autoload.php';
Run Code Online (Sandbox Code Playgroud)
和
$app = require_once __DIR__.'/../bootstrap/app.php';
Run Code Online (Sandbox Code Playgroud)
至
$app = require_once __DIR__.'/bootstrap/app.php';
Run Code Online (Sandbox Code Playgroud)
并删除所有缓存和cookie.
Ang*_*dor 11
假设您将所有其他文件和目录放在名为"locale"的文件夹中.

只需转到index.php并找到以下两行:
require __DIR__.'/../bootstrap/autoload.php';
$app = require_once __DIR__.'/../bootstrap/app.php';
Run Code Online (Sandbox Code Playgroud)
并将它们改为:
require __DIR__.'/locale/bootstrap/autoload.php';
$app = require_once __DIR__.'/locale/bootstrap/app.php';
Run Code Online (Sandbox Code Playgroud)
Was*_* A. 10
最好的办法:
我会建议不要删除公众,而不是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代码将是安全的,因为它的一级到你的公共目录:)
我只是重新命名server.php,以index.php和它的工作原理
这适用于所有laravel版本......
这是我的目录结构,
/laravel/
... app
... bootstrap
... public
... etc
Run Code Online (Sandbox Code Playgroud)
按照这些简单的步骤
要求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 /
这是对我来说最好和最短的解决方案,对于我来说,2018年5月为Laravel 5.5
1-只需将.htaccess文件从/ public目录剪切到根目录,并使用以下代码替换它:
<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>
Run Code Online (Sandbox Code Playgroud)
2-只需保存.htaccess文件即可.
3-将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, '/');
}
Run Code Online (Sandbox Code Playgroud)
这将修复脚本,样式和图像路径.任何资产路径.
对于XAMPP用户而言,无需触摸laravel默认文件系统即可从网址中删除公共文件是为您的应用程序设置虚拟主机来执行此jsut,请按照以下步骤操作
打开XAMPP控制面板应用程序,然后停止Apache。请注意,较晚的Windows机器可能会将其作为服务运行,因此请选中Apache模块左侧的框。
导航到C:/xampp/apache/conf/extraXAMPP文件所在的位置。
使用文本编辑器打开名为httpd-vhosts.conf的文件。
在第19行附近找到#NameVirtualHost *:80并取消注释或删除哈希。
在文件的最底部粘贴以下代码:
<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>
Run Code Online (Sandbox Code Playgroud)
<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>
Run Code Online (Sandbox Code Playgroud)
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.
Run Code Online (Sandbox Code Playgroud)
原始文章可以在这里找到
从网址中删除公开的4种最佳方法。
如果您使用其他任何技巧从URL中删除公共对象,例如将server.php的名称更改为index.php并更改为核心文件路径。显然,不要那样做。那为什么Laravel不提供这样的解决方案,因为这不是正确的方法。
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>
Run Code Online (Sandbox Code Playgroud)
2)通过在您的本地计算机上创建虚拟主机来删除公共主机
我在这里为Windows操作系统提供演示。但是,我将尝试定义一个步骤,以便任何人都可以轻松地遵循该步骤。您也可以针对特定的操作系统在Google上进行相同的研究。
步骤1:转到C:\ Windows \ system32 \ drivers \ etc \以管理员模式打开“主机”文件。
步骤2:向其中添加以下代码。在这里,我为您演示了projectname.local域名演示,您可以随意指定。只要使它在每个地方都恒定即可。
127.0.0.1 projectname.local
Run Code Online (Sandbox Code Playgroud)
步骤3:现在,C:\xampp\apache\conf\extra对于xampp用户和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>
Run Code Online (Sandbox Code Playgroud)
步骤4:最后但重要的一步是重新启动Xampp或Wamp并像那样访问url http://projectname.local,Laravel将在没有公共URL的情况下响应。
3)通过在Laravel中运行命令来删除公众
如果您在本地工作,则无需执行任何操作,仅需从终端或命令行工具运行以下命令。之后,您可以通过命令行通过提供的URL访问您的网站。
> php artisan serve
Run Code Online (Sandbox Code Playgroud)
如果您愿意在特定IP上运行项目,则需要运行以下命令。如果您在LAN上工作,那么如果要允许其他人从本地访问您的网站,则只需在使IP地址按照命令运行之后,通过运行“ ipconfig”来使用命令行检查IP地址即可。
> php artisan serve --host=192.168.0.177
Run Code Online (Sandbox Code Playgroud)
如果您愿意在具有特定端口的特定IP上运行项目,则需要执行以下命令。
> php artisan serve --host=192.168.0.177 --port=77
Run Code Online (Sandbox Code Playgroud)
4)移除托管服务器或面板上的公共对象
项目完成后,您需要将项目托管在服务器上,然后只需将域上的文档根目录设置为公用文件夹。检查以下屏幕截图。
根据屏幕截图,如果您在public_html中没有任何项目文件夹,则只需将文档根目录设置为"public_html/public"。
在Laravel设置中总是有一个公用文件夹的原因,所有与公用相关的资料都应存在于公用文件夹中,
不要将您的IP地址/域指向Laravel的根文件夹,而是将其指向公用文件夹。将服务器IP指向根文件夹是不安全的,因为除非您在中编写限制,否则
.htaccess一个人可以轻松访问其他文件。
只需在.htaccess文件中写入重写条件并安装重写模块并启用重写模块,即可解决在路由中添加公用的问题。
在根项目文件夹中创建名为的新文件.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>
Run Code Online (Sandbox Code Playgroud)
注意:如果您更改server.php为,index.php还应该在上面的代码中重命名它
| 归档时间: |
|
| 查看次数: |
199493 次 |
| 最近记录: |