2015-03-12 2 views
0

Я запускаю Laravel и использую php -S 0.0.0.0:80 для запуска моего сервера разработки. В этой ситуации, большинство запросы направляются в мое приложение:Маршрутизация файлов в приложение Laravel

/test 
/thisRouteToo 
/even/with/subdirectories 

Однако если маршрут может быть файл, он пытается загрузить файл вместо:

/css/styles.css 
/js/code.js 
/this/file/doesnt/exist.txt -- returns a 404 

Я хотел бы перенаправить все такие запросы в мое приложение, если файл не существует. Таким образом можно получить доступ к someFile.jpg, а содержимое JPEG определяется моим приложением.

Я попробовал оба следующих в моем файле .htaccess:

# Handle Front Controller... 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule^index.php [L] 

# Handle Front Controller... 
RewriteCond %{REQUEST_FILE} !-d 
RewriteCond %{REQUEST_FILE} !-f 
RewriteRule^index.php [L] 

В обоих случаях я получаю «404 файл не найден» при попытке получить доступ к /someFile.jpg. Желаемое поведение будет следовать по маршруту в моем приложении, например .:

Route::get('someFile.jpg', function(){ return "Test!"; }); 
+0

Вы уверены, что активировали '.htaccess' на своем dev-сервере? 'AllowOverride All' в конфигурации apache. Возможно, вам также придется включить mod_rewrite еще не. –

+0

В этом была проблема. Я рассмотрел, как установить 'AllowOverride All' для встроенного веб-сервера PHP (я запускаю сервер с' php -S 0.0.0.0: 80', по первой строке вопроса) и обнаружил, что встроенные PHP-файлы, на веб-сервере полностью игнорируется .htaccess. Он работал только на все это время, потому что у них есть белый список расширений файлов, а неизвестные расширения направляются на index.php. Очевидно, вы можете передать скрипт «router» на сервер вместо .htaccess, который я использовал для проверки существования файла. – stevendesu

ответ

0

С помощью @Panama_Jack я мог смотреть в правильном направлении для решения этого. Трюк был:

Я бегу Laravel и используя php -S 0.0.0.0:80 для запуска моего сервера развития

внутренний сервер РНР не анализирует файлы .htaccess

Это, однако, некоторая маршрутизация по умолчанию. Существует большой список известных расширений (.js, .css, .mp3 и т. Д.) - если запрос имеет одно из этих расширений, он пытается загрузить файл. Если запрос делает не один из этих доверенных расширений, он перенаправляется на index.php

Однако вместо этого можно запустить сервер с помощью следующей команды: php -S 0.0.0.0:80 router.php

Это говорит ему, чтобы направить ВСЕХ запросов router.php

затем я поставил следующее router.php:

<?php 

if(file_exists(dirname(__FILE__) . parse_url($_SERVER['REQUEST_URI'])['path'] )) { 
    return false; 
} else { 
    include_once 'index.php'; 
} 
Смежные вопросы