Zend Application из подкаталога, в котором правильны ссылки на Zend

Я установил приложение Zend в подкаталог. Не спрашивайте, почему я просто должен был сделать это так (не мой предпочтительный метод), но у меня нет такого выбора. Приложение Zend находится в подкаталоге dsa.

http://dsa.dev/dsa 

Мой .htaccess

 RewriteEngine On RewriteCond %{REQUEST_FILENAME} -s [OR] RewriteCond %{REQUEST_FILENAME} -l [OR] RewriteCond %{REQUEST_FILENAME} -d RewriteRule ^(.*)$ public/index.php [QSA,L] 

Это работает и будет загружать приложение. Я могу пойти в мои корневые каталоги и другие каталоги для других вещей без каких-либо проблем.

В моем приложении application.ini я установил

 resources.frontController.baseUrl = "/dsa". 

В моем файле layout.phtml, если я var_dump путь, он выглядит так.

 var_dump($this->baseUrl('css/main.css')); http://dsa.dev/dsa/css/main.css 

Ни одна из ссылок не работает, все файлы css и js не связаны правильно. Если вы нажмете F12 и посмотрите на них, вы получите 404, не найденный для какого-либо файла. Что мне нужно сделать, чтобы получить правильные пути для отображения файлов. Это первый раз, когда я попытался установить zend в подкаталог, и, очевидно, я не делаю что-то правильно. Я прочитал все, что могу найти по этому вопросу. Спасибо за помощь.

По крайней мере, одна проблема, я вижу, что правила перезаписи в файле .htaccess неверны.

Учитывая эти правила:

 RewriteEngine On RewriteCond %{REQUEST_FILENAME} -s [OR] RewriteCond %{REQUEST_FILENAME} -l [OR] RewriteCond %{REQUEST_FILENAME} -d RewriteRule ^(.*)$ public/index.php [QSA,L] 

Эти правила приравниваются к:

RewriteCond %{REQUEST_FILENAME} -s [OR] # Запрос – это обычный файл с размером> 0 RewriteCond %{REQUEST_FILENAME} -l [OR] # Запрос – это файл, который является символической RewriteCond %{REQUEST_FILENAME} -d [OR] # Запрос – это каталог, который существует

И если какое-либо из приведенных выше значений истинно, запрос переписывается в public/index.php что неверно. Если запрос предназначен для файла, который существует на диске, вы НЕ хотите его переписывать; вместо этого вы просто хотите обслуживать этот файл.

Правильный файл .htaccess должен выглядеть примерно так:

 RewriteCond %{REQUEST_FILENAME} -s [OR] RewriteCond %{REQUEST_FILENAME} -l [OR] RewriteCond %{REQUEST_FILENAME} -d RewriteRule ^.*$ - [NC,L] RewriteRule ^.*$ public/index.php [NC,L] 

Это говорит о том, что если запрос предназначен для файла с размером> 0, каталога или символической ссылки, затем направьте запрос на запрашиваемый файл ( RewriteRule ^.*$ - ). Если ни одно из этих условий не является истинным, перепишите запрос на index.php.

В отдельном примечании я бы пошел и полностью избавился от public каталога. Возьмите содержимое public и поместите их в /dsa . dsa теперь является вашей public папкой. Вы можете хранить каталог application любом месте системы или если вы должны поместить его в папку dsa из-за ограничений файловой системы, обязательно добавьте правило в свой файл .htaccess который лишает всех доступа к папке application . Затем вам просто нужно быстро внести изменения в файл index.php указав правильный путь к application используя константу APPLICATION_PATH .

Я считаю, что эти два изменения должны решить ваши проблемы.

Попробуйте установить RewriteBase /dsa в свой .htaccess.