我有一个使用nginx的网站,其中包含大量重定向,以保留旧的反向链接为我提供的功能和用户界面,但它们并不能完全按我的需要工作。我怀疑这可能是订购问题,但我不确定,因此希望获得一些帮助。
我敢肯定我已经快到了,但是我想不出办法让它们一起工作!
location / {
try_files $uri $uri/ @extensionless-php;
}
location @redirector {
rewrite ^(.*)$ /redirection-check/?request=$request_uri;
}
location @extensionless-php {
rewrite ^(.*?)/?$ $1.php;
}
location ~ ^([^.\?]*[^/])$ {
try_files $uri @addslash;
}
location @addslash {
return 301 $uri/;
}
location ~ \.php$ {
try_files $uri $uri/ @redirector;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/run/php/php5.6-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_index index.php;
include fastcgi_params;
}
它应该工作的方式是...
答案 0 :(得分:0)
您有一个<Table Name Here>
块来处理以location ~ \.php$
结尾的URI。这将同时处理内部重写的URI(由您的.php
块生成)和外部显示的URI(例如您的第一个要求)。
要以不同方式处理外部提供的URI,您需要查看原始请求,该请求可以作为@extensionless-php
使用。
$request_uri
包含原始请求,包括可选查询字符串,可以使用$request_uri
或map
指令进行测试。
例如:
if
有关if ($request_uri ~ ^(.*)\.php(\?|$)) { return 301 $1/; }
的使用,请参见this caution。