簡體   English   中英

Laravel Redirect :: route()在虛擬主機上進入錯誤的URL

[英]Laravel Redirect::route() going to wrong url on vhost

我今天正在處理一些代碼,並發送了Redirect::route() 它沒有像通常那樣重定向到base_url / route,而是像這樣復制了base_url:

http://myurl.dev/http://myurl.dev/myroute

我以為自己做錯了什么,所以我回過頭來試圖找出問題所在。 我最終以一個新的虛擬主機開始了一個新項目,並將這小部分代碼放入app / routes.php中

Route::get(
    'test1',
    [
        'as' => 'test1',
        function () {
            return Redirect::route('test2');
        }
    ]
);

Route::get(
    'test2',
    [
        'as' => 'test2',
        function () {
            return 'test2hello';
        }
    ]
);

當我在瀏覽器中打開http://myurl.dev/test1時,它並沒有顯示“ test2hello”,而是拋出了http並沒有發現錯誤,因為沒有找到http://myurl.dev/http://myurl.dev/test2找到。 這僅在Redirect::route() ,它按預期在Redirect::to() 它也僅在虛擬主機上發生。 如果我轉到localhost / myurl / public / test1,則Redirect::route()按預期工作。 有任何想法嗎?


更新:

我被要求進行我的虛擬主機設置。 我在Mac OSX 10.8.5上,並且正在使用內置的Apache。 我沒有評論 /etc/apache2/httpd.conf中httpd-vhosts.conf包含行。 我在/etc/apache2/extra/httpd-vhosts.conf中添加了幾個虛擬主機,這是一個:

<VirtualHost *:80>
    DocumentRoot "/Library/WebServer/Documents/example_blog/public"
    ServerName example_blog.local
</VirtualHost>

以及/ etc / hosts中的相應行:

127.0.0.1   example_blog.local

並重新啟動Apache。 該文件夾名為example_blog.local

問題似乎與URL中帶有下划線(未通過FILTER_VALID_URL)有關:

https://github.com/laravel/framework/issues/2511

(由於我正在整理此內容以幫助其他人尋找解決方案,因此我的回答不值得我信任)

試試這個方法:

Route::get(
    'test1',
    [
        'as' => 'test1',
        function () {
            return Response::make('', 302)->header('Location', route('test2'));
        }
    ]
);

Route::get(
    'test2',
    [
        'as' => 'test2',
        function () {
            return 'test2hello';
        }
    ]
);

如您所見,我們使用Response類, Redirect自身使用它來發送標頭位置:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM