Конфигурация nginx, избегайте правил перезаписи codeigniter - PullRequest
4 голосов
/ 18 ноября 2011

Это правило перезаписи nginx для codeigniter. Мы можем легко найти это с помощью поиска в Google.

server
{
    server_name .example.com;

    access_log /var/log/nginx/example.com.access.log;

    root /var/www/example.com/html;

    index index.php index.html index.htm;

    # enforce www (exclude certain subdomains)
#   if ($host !~* ^(www|subdomain))
#   {
#       rewrite ^/(.*)$ $scheme://www.$host/$1 permanent;
#   }

    # enforce NO www
    if ($host ~* ^www\.(.*))
    {
        set $host_without_www $1;
        rewrite ^/(.*)$ $scheme://$host_without_www/$1 permanent;
    }

    # canonicalize codeigniter url end points
    # if your default controller is something other than "welcome" you should change the following
    if ($request_uri ~* ^(/welcome(/index)?|/index(.php)?)/?$)
    {
        rewrite ^(.*)$ / permanent;
    }

    # removes trailing "index" from all controllers
    if ($request_uri ~* index/?$)
    {
        rewrite ^/(.*)/index/?$ /$1 permanent;
    }

    # removes trailing slashes (prevents SEO duplicate content issues)
    if (!-d $request_filename)
    {
        rewrite ^/(.+)/$ /$1 permanent;
    }

    # removes access to "system" folder, also allows a "System.php" controller
    if ($request_uri ~* ^/system)
    {
        rewrite ^/(.*)$ /index.php?/$1 last;
        break;
    }

    # unless the request is for a valid file (image, js, css, etc.), send to bootstrap
    if (!-e $request_filename)
    {
        rewrite ^/(.*)$ /index.php?/$1 last;
        break;
    }

    # catch all
    error_page 404 /index.php;

    # use fastcgi for all php files
    location ~ \.php$
    {
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME /var/www/example.com/html$fastcgi_script_name;
        include fastcgi_params;
    }

    # deny access to apache .htaccess files
    location ~ /\.ht
    {
        deny all;
    }
}

Я хочу добавить обычный php-проект на этом сервере. Корневой каталог проекта: /var/www/another/proj_new.

Как я уже упоминал, этот новый проект не использует кадр кодигнита. Это обычный проект php файла. Так что ему не нужно правило перезаписи Codeigniter.

Итак, мой вопрос, возможно, я могу получить доступ к новому проекту через Интернет.

адрес может быть таким:

http://example.com/proj_new

Этот адрес не должен вызывать контроллер proj_new codeigniter.

Я пытался добавить этот параметр:

server
    {
        ....
        ....
        ....

        localhost /proj_new {
            root     /var/www/another/proj_new
            index    index.php
        }

        ....
        ....
        ....
    }

но http://example.com/proj_new делает 404 страницы ошибок.

Ответы [ 5 ]

4 голосов
/ 21 августа 2012

Я предлагаю эту конфигурацию от Nginx

server {
        server_name nginxcodeigniter.net;

        root /var/www/codeigniter;
        index index.html index.php;

        # set expiration of assets to MAX for caching
        location ~* \.(ico|css|js|gif|jpe?g|png)(\?[0-9]+)?$ {
                expires max;
                log_not_found off;
        }

        location / {
                # Check if a file exists, or route it to index.php.
                try_files $uri $uri/ /index.php;
        }

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

После этого убедитесь, что ваш codeIgniter config.php содержит следующую информацию:

$config['base_url'] = "http://nginxcodeigniter.net/";
$config['index_page']   = "";
$config['uri_protocol'] = "REQUEST_URI";

Источник: Nginx

2 голосов
/ 18 ноября 2011

!-e в следующем разделе кода означает, что если файл, каталог или символическая ссылка не существует, перенаправьте, чтобы использовать правило перезаписи.Одного факта, что у вас есть этот подарок, должно быть достаточно для создания папки proj_new, а правило перезаписи следует игнорировать.

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

Полагаю, вы уже пытались просто создать папку proj_new.?Мне кажется, что у вас уже есть достаточно средств для достижения того, что вы хотите в вашем файле, и я не вижу никаких ошибок с ним.Вы создаете папку proj_new внутри папки html, верно?

Только что поиграли с этим, и она отлично работает.Ваша конфигурация работает как положено.Ниже приведен мой файл nginx.conf, так что вы можете посмотреть.Это был CI2.1, Nginx 1.0.1 Stable, Windows 7, PHP 5.3.1.

worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;

    keepalive_timeout  65;

    server {
        listen       80;
        server_name  localhost;

        index index.php index.html index.htm;

        # enforce NO www
        if ($host ~* ^www\.(.*))
        {
            set $host_without_www $1;
            rewrite ^/(.*)$ $scheme://$host_without_www/$1 permanent;
        }

        # canonicalize codeigniter url end points
        # if your default controller is something other than "welcome" you should change the following
        if ($request_uri ~* ^(/welcome(/index)?|/index(.php)?)/?$)
        {
            rewrite ^(.*)$ / permanent;
        }

        # removes trailing "index" from all controllers
        if ($request_uri ~* index/?$)
        {
            rewrite ^/(.*)/index/?$ /$1 permanent;
        }

        # removes trailing slashes (prevents SEO duplicate content issues)
        if (!-d $request_filename)
        {
            rewrite ^/(.+)/$ /$1 permanent;
        }

        # removes access to "system" folder, also allows a "System.php" controller
        if ($request_uri ~* ^/system)
        {
            rewrite ^/(.*)$ /index.php?/$1 last;
            break;
        }

        # unless the request is for a valid file (image, js, css, etc.), send to bootstrap
        if (!-e $request_filename)
        {
            rewrite ^/(.*)$ /index.php?/$1 last;
            break;
        }

        # catch all
        error_page 404 /index.php;

        # use fastcgi for all php files
        location ~ \.php$
        {
            fastcgi_pass 127.0.0.1:9000;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include fastcgi_params;
        }

        # deny access to apache .htaccess files
        location ~ /\.ht
        {
            deny all;
        }
    }
}
1 голос
/ 18 ноября 2011

Какую версию nginx вы используете? Это должно работать на более новых версиях с директивой try_files.

http://ericlbarnes.com/post/12197460552/codeigniter-nginx-virtual-host

server {
    server_name .mysecondsite.com;
    root /sites/secondpath/www;

    index index.html index.php index.htm;

    # set expiration of assets to MAX for caching
    location ~* \.(ico|css|js|gif|jpe?g|png)(\?[0-9]+)?$ {
        expires max;
        log_not_found off;
    }

    location / {
        # Check if a file exists, or route it to index.php.
        try_files $uri $uri/ /index.php;
    }

    location ~* \.php$ {
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_split_path_info ^(.+\.php)(.*)$;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
}
0 голосов
/ 29 ноября 2013

вы можете добавить:

Может получить доступ к папке "Backend"

    if ($request_uri ~* ^/backend)
    {
        rewrite ^/(.*)$ /backend/index.php?/$1 last;
        break;
    }
0 голосов
/ 06 июня 2013

s // попробуйте изменить бэкэнд с вашим именем проекта

location / {
    # Check if a file or directory index file exists, else route it to index.php.
    try_files $uri $uri/ /index.php;
}

# canonicalize url end points
# if your default controller is something other than "welcome" you should change the following
if ($request_uri ~* ^(/welcome(/index)?|/index(.php)?)/?$)
{
    rewrite ^/backend/(.*)$ /backend/ permanent;
}

# removes trailing "index" from all controllers
if ($request_uri ~* index/?$)
{
    rewrite ^/backend/(.*)/index/?$ /backend/$1 permanent;
}

# removes trailing slashes (prevents SEO duplicate content issues)
if (!-d $request_filename)
{
    rewrite ^/backend/(.+)/$ /backend/$1 permanent;
}

# removes access to "system" folder
if ($request_uri ~* ^/system)
{
    rewrite ^/backend/(.*)$ /backend/index.php?/$1 last;
    break;
}

# unless the request is for a valid file (image, js, css, etc.), send to bootstrap
if (!-e $request_filename)
{
    rewrite ^/backend/(.*)$ /backend/index.php?/$1 last;
    break;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...