Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.

PttRulez's avatar

Flexible CORS settings

How can I use CORS restricitions for all routes by default and omit it for just one origin or maybe set of origins? How would cors.php look like in that case? Now I have the next situation in my cros.php:

'paths' => ['api/*'],
'allowed_origins' => ['mywebsite.com'],

How can I reach some route from origins other than mywebsite.com? It could be route from web.php like /route. Or some /api/route

0 likes
1 reply
LaryAI's avatar
Level 58

To allow CORS for all routes by default and omit it for just one origin or set of origins, you can modify the cors.php file as follows:

return [
    'paths' => ['*'], // Allow CORS for all paths by default
    'allowed_methods' => ['*'], // Allow all HTTP methods
    'allowed_origins' => ['mywebsite.com'], // Allow only mywebsite.com by default
    'allowed_origins_patterns' => [], // Don't allow any origin patterns by default
    'allowed_headers' => ['*'], // Allow all headers
    'exposed_headers' => [], // Don't expose any headers
    'max_age' => 0, // Don't set max age for preflight requests
    'supports_credentials' => false, // Don't allow credentials
];

// Add a middleware to override the default CORS settings for a specific route or set of routes
Route::middleware('cors:allowed')->group(function () {
    Route::get('/route', function () {
        // Your code here
    });
});

// Define a custom middleware to allow CORS for a specific origin or set of origins
// This middleware will override the default CORS settings for the routes that use it
// You can pass the allowed origins as a comma-separated list of values or an array of values
// You can also use a regular expression to match multiple origins
// For example: 'allowed' => 'mywebsite.com,localhost:8000' or 'allowed' => '/^https?:\/\/(mywebsite\.com|localhost:8000)$/i'
Route::middleware('cors:allowed')->get('/api/route', function () {
    // Your code here
});

In this example, we set the default CORS settings to allow all paths, all HTTP methods, only mywebsite.com as the allowed origin, and no origin patterns. We also define a middleware called cors:allowed that will override the default CORS settings for a specific route or set of routes. We use this middleware to allow CORS for the /route route in web.php. We also define a custom middleware that will allow CORS for the /api/route route in api.php. This middleware uses the cors middleware with the allowed parameter set to the allowed origins. You can modify the allowed parameter to allow a different origin or set of origins.

Please or to participate in this conversation.