2015-10-14 71 views
1

問題的描述是非常具體的,但我不知道關於它的源Apache的別名/ PHP/Laravel古怪

  1. 該項目採用Laravel 5.1

  2. 我有我的計算機上的項目副本和遠程服務器。本地服務器配置爲使用VirtualHost從URL中刪除/公開。在遠程服務器上,項目位於子目錄中。例如。 /項目。爲了擺脫公衆的,還有在httpd.conf和線路RewriteBase /project在/project/public/.htaccess別名

  3. 使用Laravel的分頁機制時,就會出現這個問題:

    有鏈接到的網頁頁面導航。在本地機器上一切正常,但在遠程服務器上點擊鏈接,如URL爲http://<server_ip>/project/navigationPage?page=N導致重定向到http://<server_ip>/navigationPage?page=N。當然會出現404錯誤。

問題是什麼以及如何解決?

完整的.htaccess中/項目/公:

<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> 
+0

您可以發佈您htaccess文件? –

+0

@JonLin是的。增加了 – acedened

+0

出於好奇,爲什麼不將VirtualHost的DocumentRoot指向公用文件夾? – blackpla9ue

回答

1

好了,問題是,在加入由分頁程序鏈接斜線。鏈接看起來像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(); 
}