我已经在我的Vista机器上安装了新的Apache 2.2,一切正常,除了mod重写.
我没有注释
LoadModule rewrite_module modules/mod_rewrite.s
Run Code Online (Sandbox Code Playgroud)
但是我的重写规则都没有,即使是简单的重写规则
RewriteRule not_found %{DOCUMENT_ROOT}/index.php?page=404
Run Code Online (Sandbox Code Playgroud)
我正在使用的所有规则都在处理我的托管,所以它们应该没问题,所以我的问题是,apache配置中是否有任何隐藏的东西,可以阻止mod重写?
我知道这是一个非常受欢迎的问题,但我无法为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
当我加载非root用户的页面时,如果没有index.php,页面将不会在路由之前加载.我得到的错误:
Not Found
The requested URL /login was not found on this server.
Apache/2.4.7 (Ubuntu) Server at mydomain.com Port 80
Run Code Online (Sandbox Code Playgroud)
首先,我有一个包含以下内容的虚拟主机文件:
//also tried adding DirectoryIndex here before <directory>
<directory /var/www/mydomain.com>
DirectoryIndex index.php
AllowOverride ALL
</directory>
Run Code Online (Sandbox Code Playgroud)
和我公开的.htacces:
<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]
</IfModule>
Run Code Online (Sandbox Code Playgroud)
我有另一个域在同一台服务器上具有相同的.htaccess和appache配置,它工作正常.我也重启了apache.如果我在index.php/route页面上使用phpinfo,我会在Loaded Modules中看到:
mod_rewrite mod_setenvif
Run Code Online (Sandbox Code Playgroud)
使用xampp运行网站localy时一切正常.几个小时我现在正在尝试,但我无法解决它或发现任何错误(日志是空的)或任何我还没有尝试过的解决方案.
编辑:
我在数字海洋VPS上使用Ubuntu Ubuntu 14.04 x64.我试着再打开和关闭(如建议的那样).PHP版本5.5.9-1ubuntu4.9.我按照本教程配置了所有内容(除了direcoty部分).我更改了apache日志的位置,并在给定目录上创建了一个文件error.log,但没有错误. …
我正在使用laravel 4.
我有一个视图nest.blade.php和相应的控制器NestController.php:
控制器内容:
class NestController extends BaseController {
public function showView()
{
return View::make('nest');
}
}
Run Code Online (Sandbox Code Playgroud)
路线:
Route::get('/nest', 'NestController@showView');
Run Code Online (Sandbox Code Playgroud)
当我去url/nest它不起作用.当我去url/index.php/nest时,它确实有效.
显然我只想让它成为/ nest而不使用index.php.
我该如何解决这个问题?
我的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]
</IfModule>
Run Code Online (Sandbox Code Playgroud) 我使用Laravel框架.如您所知,其目录如下所示:
要打开我的网站主页(Route::get('/', 'HomeController@index');),我需要打开/public目录文件夹.换句话说,要查看我网站的第一页,请输入以下网址:
http://example.com/public
Run Code Online (Sandbox Code Playgroud)
无论如何,只有我的domainname(http://example.com/)不是我的root.如何/public以root身份创建文件夹?
我可以找到一个解决方法.我可以index.php在根上创建一个并将重定向代码写入/public文件夹.因此,当用户输入时http://example.com/,它将被重定向到http://example.com/public自动.但那仍然是丑陋的.我不喜欢/public在URL中看到.有什么建议吗?
我一直在这个问题上花费数小时,希望找到自己的出路。我已经正确设置了laravel,创建了一个项目myapp
我的route.php文件仅包含
Route::get('/', function()
{
return View::make('hello');
});
Route::get('/users', function()
{
return 'Users!';
});
Run Code Online (Sandbox Code Playgroud)
当我跑步
http://localhost/myapp/public/
Run Code Online (Sandbox Code Playgroud)
我正确地获得了laravel起始页面
当我跑步
http://localhost/myapp/public/users
Run Code Online (Sandbox Code Playgroud)
我懂了
The requested URL /myapp/index.php was not found on this server.
Run Code Online (Sandbox Code Playgroud)
我不知道为什么要寻找index.php。
当我跑步
http://localhost/myapp/public/index.php/users
Run Code Online (Sandbox Code Playgroud)
我得到一个带有文本“用户”的页面。我应该在运行时获取此页面
http://localhost/myapp/public/users
Run Code Online (Sandbox Code Playgroud)
代替。
以下是我的.htaccess
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>
RewriteEngine On
Rewritebase /myapp/
# Redirect Trailing Slashes...
RewriteRule ^(.*)/$ /$1 [L,R=301]
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?在Linux上运行Apache。
因此,我开发了一个功能齐全的Laravel 5应用程序,并将其部署到我的客户服务器上,运行Apache2,PHP5和MySQL.该应用程序按预期工作,并正确地重写URL.我现在需要简单地将我的应用程序克隆到另一台运行完全相同堆栈的服务器.问题是我需要将我的应用程序放在子文件夹中,以便可以通过匹配模式的URL访问它domain2.com/movedApp.
换句话说:第一台服务器响应:
domain1.com/my/routes
Run Code Online (Sandbox Code Playgroud)
第二台服务器需要响应:
domain2/movedApp/my/routes
Run Code Online (Sandbox Code Playgroud)
我试图完全重现VirtualHost指令,该指令适用于第一台服务器,/movedApp在需要的地方添加并添加RewriteBase到.htaccess新public文件夹中的文件,但无济于事.
我注意到从以下网址正确遵循路由:
domain2.com/movedApp/public/index.php/my/routes
Run Code Online (Sandbox Code Playgroud)
我仍然在Apache2日志中获得404错误资产.
我特此报告我的.htaccess文件位于public我工作的Laravel应用程序的文件夹中.
的.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]
</IfModule>
Run Code Online (Sandbox Code Playgroud)
我还报告了Web服务器用来为我的应用程序提供服务的配置文件
default.conf
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/galmaster/public
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/galmaster/public>
Options Indexes FollowSymLinks MultiViews
AllowOverride …Run Code Online (Sandbox Code Playgroud) 请考虑这是我的域名www.example.com
我在我的网站上使用laravel
这是laravel结构
app/
bootstrap/
public/
vendor/
server.php
Run Code Online (Sandbox Code Playgroud)
要从网址中删除index.php和public,请按照此回答
即
在根路径中有.htaccess
并将server.php文件重命名为index.php
这是我的.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]
Run Code Online (Sandbox Code Playgroud)
它运作良好,但问题是我有子域名
projects.example.com
虽然我在这里创建一个子目录,即
projects.example.com/firstproject
它始终显示内部服务器错误
我怎么能解决这个问题,例外,该目录或类似的东西?
我正在尝试删除public/indexlaravel url,因为这是常见问题之一,所以有很多教程和答案.我也搜索了这个,并按照@ rimon.ekjon的答案,这对我来说很好,这很简单.
将Laravel根文件夹中的server.php重命名为index.php,并将.htaccess文件从/ public目录复制到Laravel根文件夹. - 而已 !!:)
我很困惑为什么我应该重命名或从一个地方移动到另一个地方,因为文件夹中存在文件的原因.我想展示另一个好的答案,它也遵循几乎相同的模式.
我认为如果在项目中有新的要求或新的功能请求,通过以上回答,步骤可能会在将来创建一些问题.
所以任何人都可以指导我有没有最好的重写或删除public/indexlaravel 5.我想感谢有人指导我.
我正在尝试laravel在A2Hosting共享主机上部署应用程序。我的文档根目录是:/ public_html目录。我将laravel应用程序中除公用文件夹以外的所有内容都上传到了托管的/ beta目录。
然后,我将所有内容从公共目录上传到/ public_html目录。
在index.php文件中,更改了以下两行:
require __DIR__.'/../beta/vendor/autoload.php';
$app = require_once __DIR__.'/../beta/bootstrap/app.php';
Run Code Online (Sandbox Code Playgroud)
现在,我只能正确看到应用程序的主页。也就是mydomain.com。mydomain.com后跟的任何超链接都显示404消息。在我的视图文件中,这就是我所指的路径:
<a href="/login">Login</a>
Run Code Online (Sandbox Code Playgroud)
但是在部署应用程序之后,每当我点击该链接(即mydomain.com/login)时,都会收到404 Not Found: The resource requested could not be found on this server!消息。我试图改变/login到login的<a>标签。结果相同。我该如何解决?