Intereting Posts
PHP is_file и корневые относительные пути сервера интерактивное управление программой с использованием php PHP эквивалентен авторизированному ASP.NET WebMethod (AJAX)? Передача результатов запроса базы данных в jQuery Sparkline Charts с использованием PHP Я хочу вставить данные в базу данных mysql, используя PDO PHP. Но данные не вставлены Как я могу получить доступ к одному модулю в других модулях в Zend Framework? Как сделать раздел DIV доступным? Laravel 5.3 – Как сохранить сообщение сеанса до тех пор, пока пользователи не выйдут из системы Ошибка анализа: синтаксическая ошибка, неожиданный T_IF PHP Добавление результата базы данных в многомерный массив Как заставить php-скрипт запускать другой скрипт php Как определить, какой флажок установлен? Вопросы, касающиеся таблиц и объединенного / связанного содержимого; CodeIgniter Как изменить файл xml с помощью PHP Графические диаграммы для HTML-задач

Zend Framework на nginx

Сайт Zend Framework, на котором я работал, теперь переносится на его производственный сервер. Этот сервер оказывается nginx (сюрприз!). Естественно, сайт работает неправильно, поскольку он был разработан на Apache и использует файл htaccess.

Мой вопрос: у кого есть опыт? Любые идеи о том, как перевести то, что делает файл htaccess, в файл nginx.conf? Я исследую это, но надеюсь, что у кого-то уже есть опыт с этим. Благодаря!

EDIT: Это текущий htaccess:

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

Solutions Collecting From Web of "Zend Framework на nginx"

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

В основном он перенаправляет любую ошибку 404 на index.php, но если файл существует (файл типа), он установит правильный корень.

Я сделал это сверху. Возможно, он не работает сразу, и вам нужно установить правильный путь и fastcgi config. Я также возвращаю все обратно в index.php, так как он должен работать с Zend_Framework

 error_page 404 = /index.php; location / { if (-f $request_filename) { root /var/www; } } location ~ \.php$ { fastcgi_pass unix:/tmp/php.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /var/www/index.php; include /etc/nginx/fastcgi_params; } 
 server { listen 80; ## listen for ipv4 listen [::]:80 default ipv6only=on; ## listen for ipv6 server_name localhost; access_log /var/log/nginx/localhost.access.log; error_log /var/log/nginx/localhost.error.log; root /var/www/localhost/public; try_files $uri @php_index; # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # location @php_index { fastcgi_pass 127.0.0.1:9000; fastcgi_param SCRIPT_FILENAME /var/www/localhost/index.php; include fastcgi_params; } } 

Рекомендуется когда-либо использовать try_files.

Я не знаю никакого автоматического / систематического способа преобразования htaccess-файла, вам, вероятно, придется это сделать вручную. Вики Nginx – лучший ресурс для документации nginx.

Изменить: теперь я запускаю Zend Framework на Nginx, и конфигурация выглядит так:

 server { listen 80; server_name servername.com; root /var/www/zendapp/public; location / { index index.php; } # Deny access to sensitive files. location ~ (\.inc\.php|\.tpl|\.sql|\.tpl\.php|\.db)$ { deny all; } location ~ \.htaccess { deny all; } # Rewrite rule adapted from zendapp/public/.htaccess if (!-e $request_filename) { rewrite ^.*$ /index.php last; } # PHP scripts will be forwarded to fastcgi processess. # Remember that the `fastcgi_pass` directive must specify the same # port on which `spawn-fcgi` runs. location ~ \.php$ { include /etc/nginx/fastcgi_params; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; } location = /50x.html { root /var/www/default; } } 

Как вы можете видеть, правило перезаписи очень просто.

Это «официальный», простой и хорошо работает:

http://wiki.nginx.org/Zend_Framework#Time_for_nginx

Для промежуточного сервера, который мог бы помочь;)

  fastcgi_param APPLICATION_ENV staging; 

На самом деле я запускаю nginx с сайтом drupal, который работает как zend framework: один index.php в качестве начальной загрузки

это правило (не проверено на zend framework, просто на drupal, но должно быть похоже)

 location / { if (!-e $request_filename) { rewrite ^/(.*)$ /index.php?q=$1 last; break; } } error_page 404 /index.php; 

Если вы используете подкаталог для своего проекта, например http: //some.url/myproject/controller/ , то вам также нужно добавить setBaseUrl в ваш файл начальной загрузки.

 <?php class Bootstrap extends Zend_Application_Bootstrap_Bootstrap { protected function _initSomeFancyName() { $this->bootstrap('frontController'); $frontController = Zend_Controller_Front::getInstance(); $frontController->setBaseUrl('/myproject'); // set the base url! } } 

Ревизия nginx будет выглядеть так:

 location /myproject/ { if (!-e $request_filename) { rewrite ^/myproject/(.*)$ /index.php?$1? last; } } 

PS Вопросительный знак не опечатал!

Если бы это было возможно, я бы рекомендовал настроить Apache на нестандартный порт, доступный только из Nginx, и иметь прокси Nginx для Apache.

Документация Nginx Proxy