2013-07-13 2 views
0

Я пытаюсь настроить сервер Nginx в основном с 3 различными типами контента:Как обслуживать статические файлы в подпапке форума на nginx?

  • Основной сайт, работающий на CodeIgniter
  • AQ & форум, в папке /qa (работает на Question2Answer)
  • статические файлы (в разных местах, в том числе /qa)

Я бегу в различные неприятности. Мой текущий конфиг (внутри блока сервера) является:

# Q2A 
if ($request_uri ~* "^/qa/") { 
    rewrite ^/qa/(.*)$ /qa/index.php?qa-rewrite=$1 last; 
} 
# CI 
if (!-e $request_filename) { 
    rewrite ^(.+)$ /index.php?$1 last; 
} 
location/{ 
    index index.php index.html; 
} 
location ~ \.php$ { 
     try_files $uri =404; 

     fastcgi_cache one; 
     fastcgi_cache_key $scheme$host$request_uri; 
     fastcgi_cache_valid 200 302 304 5m; 
     fastcgi_cache_valid 301 1h; 

     include /etc/nginx/fastcgi_params; 
     fastcgi_pass unix:/var/run/php-fastcgi/php-fastcgi.socket; 
     fastcgi_index index.php; 
     fastcgi_param SCRIPT_FILENAME /srv/www/site$fastcgi_script_name; 
     fastcgi_param HTTPS off; 
} 

Это в основном работают по этим вопросам, за исключением:

  • Запросы на PHP файлов в моей папке приложения будут разбираемый/казнены. Очевидно, так как это не проходит через приложение CI, оно вызывает ошибки (переменные не найдены и т. Д.).
  • Все статические файлы внутри папки qa в настоящее время пассы в приложение Q2a вместо того, чтобы быть служил в качестве статических файлов

я пробовал так много разных вещей, я потерял счет, например, с использованием блока определения местоположения как location ~* ^/qa/ {} и различные перестановки try_files, но не повезло. Я также пробовал модифицировать this Wordpress example on the nginx site. Большинство из них только что закончилось /qa/, возвращая 404. Некоторые методы привели к тому, что сервер обслуживал необработанный PHP-код!

Может ли кто-нибудь помочь с надлежащим способом установить это?

ответ

1

Заменить

if ($request_uri ~* "^/qa/") { 
    rewrite ^/qa/(.*)$ /qa/index.php?qa-rewrite=$1 last; 
} 

с

location ~ /qa/(.*)? { 
    try_files $uri /qa/index.php?qa-rewrite=$1&$query_string; 
} 

также блок

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

лучше быть перемещен внутри / место и превращается в try_files

location/{ 
    index index.php index.html; 
    try_files $uri /index.php?$request_uri 
} 

если у вас все еще есть проблемы, сообщите пожалуйста.

+0

Спасибо, но почему-то страницы в каталоге/qa не работают, кроме самой директории 'mysite.com/qa /'. Кроме того, я попытался изменить это на 'location ~ * ^/qa /(.*)?$', чтобы убедиться, что это весь URL-адрес, и он вызывает загрузку PHP-кода! – DisgruntledGoat

+0

Хм, у меня может быть что-то не так. Вот исходное правило Apache: 'RewriteRule ^. * $ Index.php? Qa-rewrite = $ 0 &% {QUERY_STRING} [L]' – DisgruntledGoat

+0

Как я уже сказал, если я использую 'location ~', это ** загрузка ** фактический PHP-код, то есть загрузку файла '/ qa/index.php'. Почему это так? – DisgruntledGoat

0

If is evil. Но вы можете использовать try_files и некоторые блоки местоположения, чтобы выполнить одно и то же.

# in a `server` block 
index index.php index.html; 

# case sensitive version 
# location ~ ^/qa/(.*)?$ { 
location ~* ^/qa/(.*)?$ { 
    try_files $uri /qa/index.php?qa-rewrite=$1; 
} 

location/{ 
    try_files $uri /index.php?$request_uri; 
} 

# not sure if you even need location /, this might work 
# try_files $uri /index.php?$request_uri; 

# the rest of your FastCGI config stuff here 
+0

Это не работает, в папке qa вам предлагается загрузить PHP-код! – DisgruntledGoat

0

Это основано на конфигурации, которую я использую для своих собственных сайтов PHP, работающих под управлением nginx.

Обратите внимание, что это не проверено, но оно должно работать, так как это только слегка измененная версия.

Просто замените (вставьте) значения вашего сервера в директивы журнала и корня.

server { 
    listen 80; 
    access_log /var/log/nginx/(insert).access.log; 
    error_log /var/log/nginx/(insert).error.log; 
    root (insert); 
    server_name (insert); 
    rewrite ^/qa/(.*(?![\.js|\.css])[^.]+)$ /qa/index.php/$1 last; 
    rewrite ^(.*(?![\.js|\.css])[^.]+)$ /index.php/$1 last; 
    location ~ [^/]\.php(/|$) { 

     fastcgi_cache one; 
     fastcgi_cache_key $scheme$host$request_uri; 
     fastcgi_cache_valid 200 302 304 5m; 
     fastcgi_cache_valid 301 1h; 

     fastcgi_split_path_info ^(.+?\.php)(/.*)$; 
     fastcgi_pass unix:/var/run/php-fastcgi/php-fastcgi.socket; 
     fastcgi_index index.php; 
     include fastcgi_params; 
    } 
} 
Смежные вопросы