apachealias/PHP/Laravel-oddity

apachealias/PHP/Laravel-oddity,php,apache,.htaccess,laravel,Php,Apache,.htaccess,Laravel,问题描述非常具体,但我不知道其来源 本项目采用Laravel 5.1 我的计算机和远程服务器上有一个项目副本。本地服务器配置为使用VirtualHost从URL中删除/public。在远程服务器上,项目位于子目录中。例如/项目。为了摆脱public,在httpd.conf中有一个别名,在/project/public/.htaccess中有一行RewriteBase/project 使用Laravel的分页机制时出现问题: 在带有导航的页面中有指向页面的链接。在本地机器上一切正常,但在远程服务器

问题描述非常具体,但我不知道其来源

  • 本项目采用Laravel 5.1

  • 我的计算机和远程服务器上有一个项目副本。本地服务器配置为使用VirtualHost从URL中删除/public。在远程服务器上,项目位于子目录中。例如/项目。为了摆脱public,在httpd.conf中有一个别名,在/project/public/.htaccess中有一行
    RewriteBase/project

  • 使用Laravel的分页机制时出现问题:

    在带有导航的页面中有指向页面的链接。在本地机器上一切正常,但在远程服务器上单击URL链接,如
    http:///project/navigationPage?page=N
    导致重定向到
    http:///navigationPage?page=N
    。当然,会出现404错误

  • 问题是什么?如何解决

    在/project/public中的完全访问权限:

    <IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews
    </IfModule>
    
    RewriteEngine On
    
    RewriteBase /project
    # Redirect Trailing Slashes If Not A Folder...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)/$ /$1 [L,R=301]
    
    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
    </IfModule>
    
    
    选项-多视图
    重新启动发动机
    后勤基地/项目
    #如果不是文件夹,则重定向尾部斜杠。。。
    重写cond%{REQUEST_FILENAME}-D
    重写规则^(.*)/$/$1[L,R=301]
    #处理前控制器。。。
    重写cond%{REQUEST_FILENAME}-D
    重写cond%{REQUEST_FILENAME}-F
    重写规则^index.php[L]
    
    好的,问题出在分页器添加到链接的斜杠上。林克看起来像http:///project/navigationPage/?page=N,但必须看起来像http:///project/navigationPage?page=N (没有斜杠)。通过编辑AbstractPaginator的url函数修复了错误:

    public function url($page)
    {
        if ($page <= 0) {
            $page = 1;
        }
    
        $parameters = [$this->pageName => $page];
    
        if (count($this->query) > 0) {
            $parameters = array_merge($this->query, $parameters);
        }
    
        return  rtrim($this->path, '/').'?'
                        .urldecode(http_build_query($parameters, null, '&'))
                        .$this->buildFragment();
    }
    
    公共函数url($page)
    {
    如果($page pageName=>$page];
    如果(计数($this->query)>0){
    $parameters=array\u merge($this->query,$parameters);
    }
    返回rtrim($this->path,'/')。?'
    .urldecode(http_build_query($parameters,null,&'))
    .$this->buildFragment();
    }
    
    您可以发布您的htaccess文件吗?出于好奇,为什么不将VirtualHost的DocumentRoot指向公用文件夹?