我需要从Laravel中生成的URL中删除index.php
或public/index.php
;通常路径是localhost/public/index.php/someWordForRoute
,它应该像localhost/someWordForRoute.
的.htaccess
<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.php
'url' => 'http://localhost',
我怎么能改变呢?
如果它不存在,请在Laravel根目录中创建.htaccess文件。如果Laravel根目录不存在,请创建一个.htaccess
文件。 (通常它在你的public_html
文件夹下)
编辑.htaccess文件,使其包含以下代码:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^(.*)$ public/$1 [L]
</IfModule>
现在您应该可以访问没有“/public/index.php/”部分的网站。
在根目录中创建一个新文件夹,并移动除公用文件夹之外的所有文件和文件夹。您可以随意调用它。我将使用“laravel_code”。
接下来,将所有内容移出公共目录并移至根文件夹。它应该导致与此类似的东西:
之后,我们要做的就是编辑laravel_code/bootstrap/paths.php
文件和index.php
文件中的位置。
在laravel_code/bootstrap/paths.php
中找到以下代码行:
'app' => __DIR__.'/../app',
'public' => __DIR__.'/../public',
并将它们改为:
'app' => __DIR__.'/../app',
'public' => __DIR__.'/../../',
在index.php
中,找到以下这些行:
require __DIR__.'/../bootstrap/autoload.php';
$app = require_once __DIR__.'/../bootstrap/start.php';
并将它们改为:
require __DIR__.'/laravel_code/bootstrap/autoload.php';
$app = require_once __DIR__.'/laravel_code/bootstrap/start.php';
希望这对我来说有所帮助。
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_URI} !^public
RewriteRule ^(.*)$ public/$1 [L]
</IfModule>
我刚为项目安装了Laravel 5,根目录中有一个名为server.php
的文件。
将其更改为index.php
,它可以工作或输入终端:
$cp server.php index.php
将Laravel根文件夹中的server.php
重命名为index.php
,并将.htaccess
文件从/public
目录复制到Laravel根文件夹。
您必须执行以下步骤才能执行此操作,如下所示
.htaccess
文件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
的任何路由,它会保护它。还要确保在编辑.htaccess文件后打开重写引擎
sudo a2enmod rewrite
<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文件,请打开它并按照新路径更改bootstrap的文件夹路径,就像之前它是“require DIR。”/ .. / bootstrap / autoload.php';“现在它将成为“要求DIR。”/ laravelcode / bootstrap / autoload.php';“
这就是它运行你的url没有public和index.php,如下面的http://localhost/blog/
我在Laravel 4.2上试过这个
将Laravel根文件夹中的server.php
重命名为index.php
,并将.htaccess
文件从/public
目录复制到Laravel根文件夹。
我希望它有效
这里是删除公共URL的简单步骤(Laravel 5)
1:从公共文件夹复制所有文件并将其粘贴到laravel根文件夹中
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';
在laravel 4中,路径2是$app = require_once __DIR__.'/bootstrap/start.php';
而不是$app = require_once __DIR__.'/bootstrap/app.php';/app.php
这就对了。
不要与其他选项混淆我正在使用的下面的代码片段,对你也很有用。将以下htacces放在根目录中。
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^$ public/ [L]
RewriteRule (.*) public/$1 [L]
</IfModule>
转到您的公共目录,并将另一个htaccess文件与下面的代码段放在一起
<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下方使用
# 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]
1)检查mod_rewrite是否已启用。转到/etc/apache2/mods-enabled
目录,查看rewrite.load
是否可用。如果没有,请使用命令sudo a2enmod rewrite
启用它。它将启用重写模块。如果它已经启用,它将显示消息Module rewrite already enabled
。
2)为公共目录创建一个虚拟主机,这样我们就可以像使用http://localhost/public/index.php
一样使用http://example.com/index.php
。 [因此公用文件夹名称将被隐藏]
3)然后创建一个.htaccess,它将隐藏你的url中的index.php,该url应位于根目录(公共文件夹)中
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?/$1 [L]
这可能与Laravel没什么关系,而且与Apache配置有关。
您是否可以访问Apache服务器配置?如果是这样,请从文档中查看:
通常,只有在无法访问主服务器配置文件时才应使用.htaccess文件。例如,有一种常见的误解,即用户身份验证应始终在.htaccess文件中完成,并且在最近几年,另一种误解是mod_rewrite指令必须放在.htaccess文件中。这根本不是那么回事。您可以将用户身份验证配置放在主服务器配置中,事实上,这是执行操作的首选方式。同样,mod_rewrite指令在许多方面在主服务器配置中更好地工作。
...通常,应尽可能避免使用.htaccess文件。您考虑将任何配置放在.htaccess文件中,可以在主服务器配置文件的一个部分中有效地进行。
资料来源:Apache documentation。
我之所以提到这一点的原因是因为如果可以的话,最好完全摆脱.htaccess
,并在Directory
标签内使用VirtualHost
标签。话虽这么说,其余部分将假设你出于任何原因坚持使用.htaccess
路线。
为了打破这种局面,可能会发生一些事情:
.htacces
。我的猜测是,这是一个错字,但是你忽略它的机会实际上只是错过了第二个s,这正是一种小错误,会让我撞到墙上寻找更具挑战性的东西。.htaccess
。要检查这一点,请转到Apache配置文件。在现代Apache构建中,这通常不在一个配置文件中,因此请确保使用指向应用程序的那个,无论它存在于何处。更改
AllowOverride none
至
AllowOverride all
作为后续,Apache文档还建议,出于安全考虑,如果您打算使用.htaccess
进行重写,则不要对每个文件夹执行此操作。相反,为您需要添加.htaccess
的文件夹执行此操作。mod_rewrite
吗?这可能导致问题。我注意到你在顶部<IfModule mod_rewrite.c>
有标签。尝试注释掉这些标签并重启Apache。如果您收到错误,那可能是因为您需要启用mod_rewrite
:How to enable mod_rewrite for Apache 2.2希望这可以帮助。我已经列出了一些最常见的问题,但还有其他一些问题可能更平凡或更独特。关于开发服务器的另一个建议?重新安装Apache。如果可能的话,请使用一个好的教程从不同的来源这样做。
Laravel已经发布了漂亮的URL .htaccess ......你应该开箱即用... http://laravel.com/docs/installation#pretty-urls
确保已启用mod_rewrite,并且您的主路径已设置为应用程序的公共目录。
对于Laravel 4和5:
server.php
重命名为index.php
.htaccess
文件从/public
目录复制到Laravel根文件夹。而已 !! :)
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
在.htaccess中使用它并重新启动服务器