Apache-2.2
mod_rewrite 問題 Apache 在 Nginx 後面
我有 nginx 代理到 apache 作為後端,以便 nginx 處理靜態資產。不幸的是,當我嘗試訪問“漂亮的 url”時,它只會顯示索引頁面。
nginx 配置
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 虛擬主機配置
<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 info@example.com 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>
.htaccess
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/([a-z,]+)$ 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; }