How Can I Remove “public/index.php” in the URL Generated Laravel?
我需要从Laravel中生成的URL中删除
.htaccess
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <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] |
app / config / app.php
1 | 'url' => 'http://localhost', |
我该如何改变?
选项1:使用.htaccess
如果尚不存在,请在Laravel根目录中创建一个.htaccess文件。
如果您的Laravel根目录尚不存在,请创建一个
编辑.htaccess文件,使其包含以下代码:
1 2 3 4 | <IfModule mod_rewrite.c> RewriteEngine On RewriteRule ^(.*)$ public/$1 [L] </IfModule> |
现在,您应该可以访问没有" /public/index.php/"部分的网站。
选项2:将" / public"目录中的内容移至根目录
在根目录中新建一个文件夹,然后移动除公用文件夹之外的所有文件和文件夹。您可以随便叫它。我将使用" laravel_code"。
接下来,将所有内容移出公共目录并移至根文件夹。它应导致类似于以下内容:
之后,我们要做的就是编辑
在
1 2 | 'app' => __DIR__.'/../app', 'public' => __DIR__.'/../public', |
并将它们更改为:
1 2 | 'app' => __DIR__.'/../app', 'public' => __DIR__.'/../../', |
在
1 2 | require __DIR__.'/../bootstrap/autoload.php'; $app = require_once __DIR__.'/../bootstrap/start.php'; |
并将它们更改为:
1 2 | require __DIR__.'/laravel_code/bootstrap/autoload.php'; $app = require_once __DIR__.'/laravel_code/bootstrap/start.php'; |
来源:如何从Laravel中的URL删除/ public /
我在Laravel 4.2上尝试过
将Laravel根文件夹中的
我希望它能起作用
请不要与我正在使用的以下代码段的其他选项混淆,它也将对您有用。
将以下htacces放在您的根目录中。
1 2 3 4 5 | <IfModule mod_rewrite.c> RewriteEngine on RewriteRule ^$ public/ [L] RewriteRule (.*) public/$1 [L] </IfModule> |
转到您的公共目录,然后在下面的代码段中放入另一个htaccess文件
1 2 3 4 5 6 7 8 | <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下使用
1 2 3 4 5 6 7 8 9 | # 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] |
删除URL中的公共内容的简单步骤(Laravel 5)
1:从公用文件夹复制所有文件,并将其粘贴到laravel根文件夹中
2:打开index.php并进行更改
从
1 | require __DIR__.'/../bootstrap/autoload.php'; |
至
1 | require __DIR__.'/bootstrap/autoload.php'; |
和
1 | $app = require_once __DIR__.'/../bootstrap/app.php'; |
至
1 | $app = require_once __DIR__.'/bootstrap/app.php'; |
在Laravel 4中,路径2是
这就对了。
1)检查是否启用了mod_rewrite。转到
2)为公共目录创建一个虚拟主机,这样我们就不必像
3)然后创建一个.htaccess文件,它将从您的URL中隐藏index.php,该URL应该位于根目录(公用文件夹)内
1 2 3 4 | RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ /index.php?/$1 [L] |
这可能与Laravel无关,而与您的Apache配置无关。
您可以访问Apache服务器配置吗?如果是这样,请从文档中进行检查:
In general, you should only use .htaccess files when you don't have
access to the main server configuration file. There is, for example, a
common misconception that user authentication should always be done in
.htaccess files, and, in more recent years, another misconception that
mod_rewrite directives must go in .htaccess files. This is simply not
the case. You can put user authentication configurations in the main
server configuration, and this is, in fact, the preferred way to do
things. Likewise, mod_rewrite directives work better, in many
respects, in the main server configuration.... In general, use of .htaccess files should be avoided when
possible. Any configuration that you would consider putting in a
.htaccess file, can just as effectively be made in a
section in your main server configuration file.Source: Apache documentation.
我之所以首先提到它,是因为如果可能的话,最好是完全摆脱
为了解决这个问题,可能会发生一些事情:
我注意到,也许毫无意义,您的文件在您的问题中被命名为
您的服务器无法允许
1 | AllowOverride none |
至
1 | AllowOverride all |
作为后续,Apache文档还建议出于安全目的,如果要使用
是否启用了
如何为Apache 2.2启用mod_rewrite
希望这可以帮助。我已经列出了一些最常见的问题,但还有其他一些可能更为平凡或独特。开发服务器上的另一个建议?重新安装Apache。如果可能的话,请从其他来源获得良好的教程。
另外,请确保在编辑.htaccess文件后,"重写英语"功能已打开
1 | sudo a2enmod rewrite |
您必须执行以下步骤来执行此操作,如下所示
-
将您的域映射到项目的公用文件夹(即/ var / www / html / yourproject / public)(如果使用linux)
-
转到您的公用文件夹,在其中编辑您的
.htaccess 文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | 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 的任何路由,则可以保护它。
对于Laravel 4和5:
而已 !! :)
Laravel已经提供了一个漂亮的URL .htaccess ...您应该可以直接使用...
http://laravel.com/docs/installation#pretty-urls
确保启用了mod_rewrite并将主路径设置为应用程序的公共目录。
希望这对我有帮助。
1 2 3 4 5 | <IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{REQUEST_URI} !^public RewriteRule ^(.*)$ public/$1 [L] </IfModule> |
它有效且100%安全
https://medium.com/@matteovirgilio/laravel-5-how-to-change-the-public-folder-and-secure-private-files-on-shared-hosting-a8e2e5b9b25f
将Laravel根文件夹中的
我刚刚为项目安装了Laravel 5,并且在根目录中有一个名为
将其更改为
1 | $cp server.php index.php |
1 2 3 4 5 6 | RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php/$1 [L] |
在.htaccess中使用它并重新启动服务器
1 2 3 4 | <IfModule mod_rewrite.c> RewriteEngine On RewriteRule ^(.*)/(public)/(index.php)/$ $1/$4 [L] </IfModule> |
根据Laravel 5.3,上述操作将无法正常进行,但请保持冷静并遵循以下步骤:
步骤1.进入laravel项目内部
第2步。随机制作一个目录/文件夹。 laravelcode
步骤3.移动所有文件夹和文件(公用文件夹除外)
步骤4.将公用文件夹中的所有文件夹和文件移至laravel项目
第5步。现在laravel项目中有index.php文件,请打开该文件并按照新路径更改用于引导的文件夹路径,就像以前的"需要DIR。'/ .. / bootstrap / autoload.php';"一样。现在变成"需要DIR。'/ laravelcode / bootstrap / autoload.php';"
就是这样,不运行public和index.php就运行您的网址,如下所示
http:// localhost / blog /