我的目标:将网址从 host.com/?abc 重写为 host.com/abc ,并可以通过$ _SERVER ['QUERY_STRING']申请。我发现了以下规则:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /?$1 [L,QSA]
但无论出于何种原因,我的$ _SERVER ['QUERY_STRING']都是空的,除非我把'?'在查询字符串前面。当我执行print_r($ _SERVER)或print_r($ _GET)时,我的查询字符串不存在于任何地方。我有什么错误吗?谢谢!
UPDATE; 我正在使用nginx作为“前端”代理,并使用以下规则将请求重定向到apache:
server
{
listen 80;
root /var/hosts/hostcom;
index index.php index.html index.htm;
server_name host.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:8010;
}
location ~ /\.ht {
deny all;
}
}
如果我直接请求apache端口,它运行host.com:8010/?abc,但不是通过nginx,任何建议?谢谢!
答案 0 :(得分:1)
来自nginx docs:
如果找不到任何文件,则内部重定向到uri 在最后一个参数中指定。
try_files
将对不存在的文件的任何请求重写为index.php
,在它到达Apache之前丢失路径。
我相信您的位置块看起来应该更像这样,它应该将任何丢失文件的请求转发给Apache而不重写它:
location / {
try_files $uri $uri/ @apache;
}
location @apache {
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:8010;
}