2011-11-18 55 views
0

我有一個Codeigniter PHP應用程序,並且我已經配置好了我的nginx conf來完成一些URL。例如,/index.php/home將重寫爲/ home。 現在我正在嘗試配置nginx將http://mysite.com/sitemap.xml重寫爲/ sitemap(它構造了xml文件)。這是我用我的nginx的conf什麼:Nginx:重寫/sitemap.xml到/ sitemap

  if ($request_uri ~* ^/sitemap.xml) 
     { 
      rewrite ^/(.*)$ /index.php/sitemap last; 
     } 

出於某種原因,上述不工作,我認爲另一個規則可能是相互衝突的,但我不能想出一個解決辦法。誰能幫忙? (完整的配置文件是以下)以上

 server { 
      listen 80; 

      root /www/myapp; 
      index index.php index.html index.htm; 

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

      if (-f /www/myapp/application/errors/error_503.html) 
      { 
       return 503; 
      } 

      # canonicalize codeigniter url end points 
      #/home will redirect to/
      if ($request_uri ~* ^(/home(/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; 
      } 

############THIS PART IS NOT WORKING 
      if ($request_uri ~* ^/sitemap.xml) 
      { 
       rewrite ^/(.*)$ /index.php/sitemap last; 
      } 
#################################### 

      # 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; 
      } 

     ## Default location 
     location/{ 
      root /www/myapp; 
      index index.html index.htm index.php; 
     }  

     ## Images and static content is treated different 
     location ~* ^.+.(jpg|jpeg|gif|css|png|js|ico)$ { 
      access_log  off; 
      expires   30d; 
      root /www/myapp; 
     } 

     ## Parse all .php file in the www directory 
     location ~ .php$ { 
      fastcgi_split_path_info ^(.+\.php)(.*)$; 
      fastcgi_pass 127.0.0.1:9000; 
      fastcgi_index index.php; 
      include /etc/nginx/fastcgi_params; 
      fastcgi_param SCRIPT_FILENAME /www/myapp/$fastcgi_script_name; 
      fastcgi_param QUERY_STRING  $query_string; 
      fastcgi_param REQUEST_METHOD $request_method; 
      fastcgi_param CONTENT_TYPE  $content_type; 
      fastcgi_param CONTENT_LENGTH $content_length; 
      fastcgi_intercept_errors  on; 
      fastcgi_ignore_client_abort  off; 
      fastcgi_connect_timeout 60; 
      fastcgi_send_timeout 180; 
      fastcgi_read_timeout 180; 
      fastcgi_buffer_size 128k; 
      fastcgi_buffers 4 256k; 
      fastcgi_busy_buffers_size 256k; 
      fastcgi_temp_file_write_size 256k; 
     } 

     ## catch all 
     #error_page 404 /index.php; 

     # redirect server error pages to the static page /50x.html 
     # 
     error_page 500 502 503 504 /50x.html; 
     location = /50x.html { 
      root html; 
     } 

     ## Disable viewing .htaccess & .htpassword 
     location ~ /\.ht { 
      deny all; 
     } 
    } 

回答

1

問題是,REQUEST_URI保持爲/sitemap.xml代替/站點地圖,所以CI不能適當地路由它。嘗試改變 「最後」 到 「重定向」:

 if ($request_uri ~* ^/sitemap.xml) 
     { 
      rewrite ^/(.*)$ /sitemap redirect; 
     } 

還要考慮使用位置而不是IF(避免IF一般):

 location = /sitemap.xml 
     { 
      rewrite .* /sitemap redirect; 
     } 

希望幫助

0

我在使用它我的網站:

# Sitemap.xml 
location /sitemap.xml { 
    alias /venvs/mobilepro/src/mobilepro/static/maps/map.xml; 
}