Skip to content

Commit 778ead7

Browse files
authored
Merge pull request #592 from inertiajs/fix-url-generation
Fix URL generation
2 parents 463b280 + 5139432 commit 778ead7

File tree

2 files changed

+41
-1
lines changed

2 files changed

+41
-1
lines changed

src/Response.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
use Illuminate\Http\Request;
88
use Illuminate\Http\JsonResponse;
99
use Illuminate\Support\Facades\App;
10+
use Illuminate\Support\Str;
1011
use GuzzleHttp\Promise\PromiseInterface;
1112
use Illuminate\Support\Traits\Macroable;
1213
use Illuminate\Contracts\Support\Arrayable;
@@ -99,7 +100,7 @@ public function toResponse($request)
99100
$page = [
100101
'component' => $this->component,
101102
'props' => $props,
102-
'url' => $request->getBaseUrl().$request->getRequestUri(),
103+
'url' => Str::start(Str::after($request->fullUrl(), $request->getSchemeAndHttpHost()), '/'),
103104
'version' => $this->version,
104105
];
105106

tests/ResponseTest.php

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -361,4 +361,43 @@ public function test_responsable_with_invalid_key(): void
361361
$page['props']['resource']
362362
);
363363
}
364+
365+
public function test_the_page_url_is_prefixed_with_the_proxy_prefix(): void
366+
{
367+
if (version_compare(app()->version(), '7', '<')) {
368+
$this->markTestSkipped('This test requires Laravel 7 or higher.');
369+
}
370+
371+
Request::setTrustedProxies(['1.2.3.4'], Request::HEADER_X_FORWARDED_PREFIX);
372+
373+
$request = Request::create('/user/123', 'GET');
374+
$request->server->set('REMOTE_ADDR', '1.2.3.4');
375+
$request->headers->set('X_FORWARDED_PREFIX', '/sub/directory');
376+
377+
$user = ['name' => 'Jonathan'];
378+
$response = new Response('User/Edit', ['user' => $user], 'app', '123');
379+
$response = $response->toResponse($request);
380+
$view = $response->getOriginalContent();
381+
$page = $view->getData()['page'];
382+
383+
$this->assertInstanceOf(BaseResponse::class, $response);
384+
$this->assertInstanceOf(View::class, $view);
385+
386+
$this->assertSame('/sub/directory/user/123', $page['url']);
387+
}
388+
389+
public function test_the_page_url_doesnt_double_up(): void
390+
{
391+
$request = Request::create('/subpath/product/123', 'GET', [], [], [], [
392+
'SCRIPT_FILENAME' => '/project/public/index.php',
393+
'SCRIPT_NAME' => '/subpath/index.php',
394+
]);
395+
$request->headers->add(['X-Inertia' => 'true']);
396+
397+
$response = new Response('Product/Show', []);
398+
$response = $response->toResponse($request);
399+
$page = $response->getData();
400+
401+
$this->assertSame('/subpath/product/123', $page->url);
402+
}
364403
}

0 commit comments

Comments
 (0)