Я установил приложение 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.