Как избежать index.php в маршруте Zend Framework с использованием Nginx rewrite

Я пытаюсь избавиться от index.php из маршрута Zend Framework по умолчанию. Я думаю, что он должен быть исправлен на уровне serverа, а не на приложении. (Исправьте меня, если я ошибаюсь, но я думаю, что делать это на стороне serverа более эффективно).

Я запускаю Nginx 0.7.1 и php-fpm 5.3.3

Это моя configuration nginx

server { listen *:80; server_name domain; root /path/to/http; index index.php; client_max_body_size 30m; location / { try_files $uri $uri/ /index.php?$args; } location /min { try_files $uri $uri/ /min/index.php?q=; } location /blog { try_files $uri $uri/ /blog/index.php; } location /apc { try_files $uri $uri/ /apc.php$args; } location ~ \.php { include /usr/local/etc/nginx/conf.d/params/fastcgi_params_local; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_script_name; fastcgi_param SERVER_NAME $http_host; fastcgi_pass 127.0.0.1:9000; } location ~* ^.+\.(ht|svn)$ { deny all; } # Static files location location ~* ^.+\.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js)$ { expires max; } } 

В основном веб-website www.domain.com/index.php/path/to/url и www.domain.com/path/to/url обслуживает один и тот же контент.

Я хотел бы исправить это, используя nginx rewrite.

Вам понадобятся местоположения, подобные этому в каждом из ваших местоположений . Я просто пишу пример для местоположения /blog :

 location /blog/ { try_files $uri $uri/ @blog; } location @blog { rewrite ^/blog/(.*)$ /blog/index.php/$1 last; } 

Также отображается в вашем конфиге: вы можете использовать fastcgi_split_path_info в своем расположении PHP:

 location ~ ^(.+\.php)(.*)$ { include fastcgi_params; fastcgi_split_path_info ^(.+\.php)(.*)$; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_pass localhost:9000; } 

Подробнее см. В документации .

Идеальное решение подразумевает поддержку приложения, поскольку оно должно понять, на каком пути он работает. Это позволяет выбрать правильный ресурс для обслуживания и вернуть правильные ссылки и перенаправления. В этом случае configuration nginx будет выглядеть примерно так:

 location / { include fastcgi_params; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_script_name; fastcgi_pass 127.0.0.1:9000; } 

т.е. просто передать все [0] на определенный PHP-скрипт. Это может действительно работать с Zend (я не использовал его сам).

Если приложение не может быть изменено, чтобы понять это, тогда все становится беспорядочным с переписыванием путей и изменением содержимого. Уловка с переписыванием гарантирует, что переписанный path не будет перезаписан снова. Следующее перепишет пути к /index.php и передаст их Zend.

 location ~ \.php(/|$) { include fastcgi_params; fastcgi_split_path_info ^(.+\.php)(.*)$; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_pass 127.0.0.1:9000; } location / { rewrite ^/(.*)$ /index.php/$1; } 

Если это не работает, вероятно, потому, что Zend неправильно обрабатывает request – проверьте журналы, чтобы узнать, какой path он пытается find.

Это не приведет к появлению ссылок, возвращаемых в HTML, или перенаправлений, отправленных Zend, чтобы использовать path без «index.php», однако nginx, похоже, не имеет механизма для их изменения. Проверьте, имеет ли Zend способ настройки корневого пути для ссылок и перенаправления.

[0] Вы, очеviewно, хотите напрямую использовать static контент, я пропустил это.

Попробуйте что-то вроде этого:

 rewrite ^/(.*)$ /index.php/$1; 
 # Rewrite rule adapted for Zend Framework location / { index index.php; if (!-f $request_filename) { rewrite ^(.*)$ /index.php last; } } переписать ^ (. *) $ /index.php last; # Rewrite rule adapted for Zend Framework location / { index index.php; if (!-f $request_filename) { rewrite ^(.*)$ /index.php last; } } 
  • Mod_pagespeed с Zend Framework дает 404
  • Я получаю 500 ошибок на http: // localhost / zftutorial / public
  • Установка часового пояса в MySQL при каждом подkeyении с использованием Zend PHP
  • Zend Framework не будет работать для URL-адресов с завершающим косой чертой - как настроить nginx правильно переписать URL-адреса?
  • Postfix / OpenDKIM не подписывает PHP отправленные письма
  • Требуется эквивалент SCRIPT_URL от Apache в nginx + php-fpm
  • Как удалить вызовы require_once в directoryе (Win)
  • Ionics Rewrite Настройка filterа в IIS 5.1
  • http: // localhost не работает, http://127.0.0.1 работает
  • Исkeyить directory из перезаписи с помощью mod_rewrite и lighttpd
  • Конфигурация nginx для нескольких подdirectoryов, содержащих fileы zf2 / php, не работает
  • Давайте будем гением компьютера.