2014-03-26 49 views
1

我們最近設置了一個新的服務器。這是一個自定義的PHP MVC框架,這是在根目錄坐鎮的.htaccess:wordpress/wp-admin nginx和apache,試圖下載文件

Options +FollowSymLinks 
<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteRule \.(ico|css|jpeg|jpg|gif|png|js|pdf)$ - [L] 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)$ index.php [L] 
</IfModule> 

有一個名爲博客的根文件夾的目錄。這是wordpress安裝的地方。

我們一直在使用Apache的一切,一切正常。然而,我們獲得了更多的流量和現在使用的nginx服務器靜態內容,與Apache服務一切

Apache的配置:

<VirtualHost *:8080> 
    ServerAdmin [email protected] 
    ServerName example.com 
    ServerAlias www.example.com example.com 
    DocumentRoot /srv/www/example.com/public_html/ 
    ErrorLog /srv/www/example.com/logs/error.log 
    CustomLog /srv/www/example.com/logs/access.log combined 

<IfModule mpm_itk_module> 
    AssignUserId webadmin www-data example 
</IfModule> 

<IfModule mod_rewrite.c> 
    RewriteEngine On 

    rewritecond %{http_host} ^www.example.com [nc] 
    rewriterule ^(.*)$ http://example.com$1 [r=301,nc,qsa] 
</IfModule> 
</VirtualHost> 

nginx的配置:

server { 
    listen 80; 
    server_name www.example.com; 
    return 301 $scheme://example.com$request_uri; 
} 

server { 
    listen 80; 
    server_name example.com; 
    root /srv/www/example.com/public_html; 
    index index.php; 

    # Add trailing slash to */wp-admin requests. 
    rewrite /wp-admin$ $scheme://$host$uri/ permanent; 

    location ~* ^.+\.(?:js|css|jpe?g|htc|xml|otf|ttf|eot|woff|gif|png|svg|ico|pdf|html|htm)$ { 
      access_log off; 
      expires 30d; 
      tcp_nodelay off; 
      open_file_cache max=3000 inactive=120s; 
      open_file_cache_valid 45s; 
      open_file_cache_min_uses 2; 
      open_file_cache_errors off; 
    } 

    location/{ 
      try_files $uri @proxy; 
    } 

    location @proxy { 
      include /etc/nginx/proxy_params; 
      proxy_pass http://127.0.0.1:8080; 
    } 

    location ~ /\.ht { 
      deny all; 
    } 

} 

一切都在博客上作品正確。你可以去家裏WordPress的網頁,博客,發表評論等

但是,只有這是行不通的事情是WordPress的可溼性粉劑管理員

當我們試圖去這個頁面:例子。 COM /博客/可溼性粉劑管理員

瀏覽器下載的源代碼爲wp-login.php中

我不知道爲什麼發生這種情況,我很茫然。在試圖配置nginx時,我曾經簡要地看過這個,它與index.php有關係嗎?

任何人都有任何想法。

的博客目錄,包含了所有標準的WordPress安裝,包括爲WordPress

PHP默認的.htaccess安裝,就像我說的一切工作正常,除了可溼性粉劑管理員,它看起來像它去WP -login,在這種情況下,nginx/apache會嘗試下載實際的文件。

這可能是一個啞劇問題我期待到它

回答

1

我認爲這可能是你的問題:如果文件存在$uri

location/{ 
     try_files $uri @proxy; 
} 

這將第一次測試,如果是的話,爲它服務。具體來說:

當你第一次瀏覽到/wp-admin,WordPress認爲你沒有登錄並將你重定向到/wp-login.php。因此$uri/wp-login.php,並且由於該文件確實存在,nginx會繼續並提供服務。

我的解決辦法是添加這一點,雖然我不知道它是做的最好的方式:

location ~* \.php$ { 
    try_files @ @proxy; 
} 

這傳遞給您的代理的所有請求PHP資源。 「@」是必需的,因爲try_files至少需要一個文件參數;這假定這樣的文件實際上不存在。

我見過另外一種使用try_files和一個類似的虛擬文件在野外。我認爲這可能可以用rewrite來完成,但無法理解。

0

我認爲有可能是這裏有兩個問題之一。

問題A: 由於某種原因,您沒有安裝PHP。修復很簡單,只需使用您的特定發行版的任何安裝包進行安裝即可。

和/或問題B: 您設置的nginx服務器可能沒有適合PHP的MIME類型設置,因此它只是假定它是一個文本文件。我不完全確定,我不是Nginx的主人,但基於我的知識,這是我能想出的。

+0

我不認爲這是一個MIME問題。我包含了nginx 1.1.19附帶的默認MIME。我認爲這是一個.htaccess/index.php錯誤,雖然我不確定。 PHP絕對至少安裝了apache模塊,就像我說的Nginx沒有提供php,它將所有php請求傳遞給apache。目前的網站正在運行,目前正在服務於我們的發言請求。唯一不起作用的是wp-admin。用戶可以再次查看該博客,包括帖子,發佈評論等。 – user1050544

+0

當您轉到/ wp-admin /目錄時,您會發送什麼腳本?像'/ login.php'這樣的東西?我在想,也許'.htaccess'不會進入/ wp-admin /。再一次,我對mod_rewrite或Nginx不是很熟練,所以如果這是一個愚蠢的問題,請原諒我。 – duper51

+0

它看起來像重定向到wp登錄,然後由於某種原因下載其內容。它基本上是下載wp-login.php文件,它只包含該頁面的php代碼。它很奇怪。 WordPress的根目錄中的.htaccess看起來並不像它做任何瘋狂的事情。我害怕改變它,因爲一切工作 – user1050544