我有nginx代理到Apache作为后端为了nginx处理静态资产。 不幸的是,当我试图访问一个“漂亮的url”,它只是显示索引页面。
nginxconfiguration
server { listen 80; root /var/www/example.com; index index.php index.html index.htm; server_name example.com www.example.com a.example.com b.example.com c.example.com; location / { try_files $uri $uri/ /index.php; } location ~ \.php$ { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header Host $host; proxy_pass http://127.0.0.1:8080; } location ~ /\.ht { deny all; } }
Apache vhostconfiguration
<VirtualHost 127.0.0.1:8080> ServerName example.com ServerAlias www.example.com ServerAlias a.example.com ServerAlias b.example.com ServerAlias c.example.com ServerAdmin [email protected] DocumentRoot /var/www/example.com <Directory /var/www/example.com> AllowOverride All </Directory> ErrorLog ${APACHE_LOG_DIR}/5r_error.log CustomLog ${APACHE_LOG_DIR}/5r_access.log combined </VirtualHost>
RewriteEngine on RewriteCond %{DOCUMENT_ROOT}/maintenance.html -f RewriteCond %{REQUEST_FILENAME} !/maintenance.html RewriteRule ^.*$ /maintenance.html [L] RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC] RewriteRule ^ http%2://%1%{REQUEST_URI} [L,R=301] RewriteCond %{HTTP_HOST} ^example-old.co.uk [NC,OR] RewriteCond %{HTTP_HOST} ^www.example-old.co.uk [NC] RewriteRule ^(.*)$ http://example.com/$1 [L,R=301,NC] RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)/$ /$1 [L,R=301] RewriteRule ^servers/([^\/]+)/?$ servers.php?scroll-to-server=$1 [L,QSA] RewriteRule ^media/([0-9]+)$ media.php?media-id=$1 [L,QSA] RewriteRule ^media/([az,]+)$ media.php?filter=$1 [L,QSA] RewriteRule ^manage/?([^\/]+)$ admin.php?page=$1 [L,QSA] RewriteRule ^operations/?([^/]*)(.*)$ operations.php?c=$1&m=$2 [L,QSA] ErrorDocument 404 /error ErrorDocument 403 /error RewriteCond %{SCRIPT_FILENAME} !-d RewriteRule ^([^.]+)$ $1.php [NC,L]
当我访问example.com它加载正常,当我访问example.com/test它只是显示主页仍然。 Chrome中的请求返回200。
你的try_files将URL改为/index.php ,以便向上游发送它,这会丢失漂亮的固定链接 。
你可以尝试通过添加一个命名的位置来发送漂亮的永久链接 。 也许:
location / { try_files $uri $uri/ @proxy; } location @proxy { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header Host $host; proxy_pass http://127.0.0.1:8080; } location ~ \.php$ { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header Host $host; proxy_pass http://127.0.0.1:8080; }
看到这个和这个细节。