Nginx
nginx單頁js應用pushstate vs wordpress重寫規則
我想添加: /client 包含主幹 js 應用程序的子文件夾(帶有 pushstate) /admin 包含主幹 js 應用程序的子文件夾(有或沒有 pushstate)
當我在瀏覽器中打開我的http://example.dev/client時,它確實打開了單頁應用程序的 index.html,但是只要我將 /gallery/1/date 添加到 url,它就會打開wordpress 404 頁面而不是 pushstate。
這是我的 nginx 位置塊:
# {{ ansible_managed }} location ^~ /admin { #alias /var/www/project/admin/public/; try_files $uri $uri/ /index.html; rewrite ^/admin/(.+/)$ /admin/index.html last; } location ^~ /client { #alias /var/www/project/client/public/; try_files $uri $uri/ /index.html; rewrite ^/client/(.+/)$ /client/index.html last; } # Prevent PHP scripts from being executed inside the uploads folder. location ~* /app/uploads/.*\.php$ { deny all; } location / { try_files $uri $uri/ /index.php?$args; } # Set the max body size equal to PHP's max POST size. client_max_body_size {{ php_post_max_size | default('25m') | lower }}; include h5bp/directive-only/x-ua-compatible.conf; include h5bp/directive-only/extra-security.conf; include h5bp/location/cross-domain-fonts.conf; include h5bp/location/protect-system-files.conf;
編輯:這是整個伺服器塊:(包括 wordpress.conf 包含上面的程式碼範例)
# Ansible managed: /home/ivan/Dev/fapps/trellis/roles/wordpress-setup/templates/wordpress-site.conf.j2 modified on 2016-02-27 10:16:10 by ivan on ivan-ubuntu server { listen 443 ssl http2; server_name fapps.dev ; access_log /srv/www/example.com/logs/access.log; error_log /srv/www/example.com/logs/error.log; root /srv/www/example.com/current/web; index index.php index.htm index.html; charset utf-8; # See Virtualbox section at http://wiki.nginx.org/Pitfalls sendfile off; add_header Fastcgi-Cache $upstream_cache_status; include h5bp/directive-only/ssl.conf; include h5bp/directive-only/ssl-stapling.conf; ssl_dhparam /etc/nginx/ssl/dhparams.pem; ssl_buffer_size 1400; # 1400 bytes to fit in one MTU add_header Strict-Transport-Security "max-age=31536000; includeSubdomains; preload"; ssl_certificate /etc/nginx/ssl/example.com_self_signed.pem; ssl_trusted_certificate /etc/nginx/ssl/example.com_self_signed.pem; ssl_certificate_key /etc/nginx/ssl/example.com_self_signed.key; include includes.d/example.com/*.conf; include wordpress.conf; location ~ \.php$ { try_files $uri =404; error_page 404 /index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; fastcgi_param DOCUMENT_ROOT $realpath_root; fastcgi_pass unix:/var/run/php-fpm-wordpress.sock; } } server { listen 80; server_name fapps.dev www.fapps.dev; return 301 https://$host$request_uri; } server { listen 443 ssl http2; server_name www.fapps.dev; return 301 $scheme://fapps.dev$request_uri; }
指令中的最後一個元素
try_files
應該是應用程序的 URI(/admin/index.html
和/client/index.html
分別)。事實上,這
rewrite
可能是多餘的。嘗試:
location ^~ /admin { try_files $uri $uri/ /admin/index.html; } location ^~ /client { try_files $uri $uri/ /client/index.html; }
有關詳細資訊,請參閱此文件。