Приложение Zend из Подкаталога получает корректную работу ссылок макета Zend - PullRequest
4 голосов
/ 21 марта 2012

Я установил приложение 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 в подкаталоге, и, очевидно, я что-то не так делаю. Я прочитал все, что я могу найти на эту тему. Спасибо за помощь.

Ответы [ 2 ]

6 голосов
/ 22 марта 2012

По крайней мере одна проблема, которую я вижу, состоит в том, что правила перезаписи в файле .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 правило, запрещающее любой доступ к * Папка 1032 *. Затем вам просто нужно быстро изменить файл index.php, указав правильный путь к application с использованием константы APPLICATION_PATH.

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

0 голосов
/ 22 марта 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...