所以,在过去的 8 个小时里我一直在试图解决这个问题,但似乎我陷入了困境......
我有以下 Nginx 配置文件:
server_tokens off;
upstream php-handler {
server unix:/var/run/php5-fpm.sock;
}
server {
listen 80;
server_name domain.net;
access_log /var/log/nginx/domain.net-access.log;
error_log /var/log/nginx/domain.net-error.log;
location ~* \.(jpg|jpeg|gif|png|js|css|ico|eot|woff|ttf|svg|cur|htc|xml|html|tgz)$ {
expires 24h;
}
root /var/www/html/domain.net;
index index.php;
location ~ ^/cars/sale(.*) {
add_header X-Robots-Tag "noindex, nofollow" always;
try_files $uri $uri/ /index.php;
}
location ~ ^/(?:\.htaccess|config){
deny all;
}
location / {
try_files $uri $uri/ /index.php;
}
location ~ \.php(?:$|/) {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_pass php-handler;
fastcgi_read_timeout 120s;
fastcgi_buffer_size 128k;
fastcgi_buffers 4 256k;
fastcgi_busy_buffers_size 256k;
fastcgi_ignore_client_abort on;
fastcgi_param SERVER_NAME $http_host;
}
}
问题是,无论我怎么尝试,来自“/cars/sale”位置的 X-Robots-Tag 都无法添加。我猜这是因为请求被传递到最终的“.php”位置,之前添加的任何标头都被遗忘了。有没有办法,我可以只为该特定位置添加此标头,而无需使用 more_set_headers?
答案1
你实际上可以这样做:
map $request_uri $robot_header {
default "";
~^/cars/sale(.*) "noindex, nofollow";
~^/bikes/sale(.*) "noindex, nofollow";
~^/motorbikes/sale(.*) "noindex, nofollow";
}
但是如果它们都遵循这种模式,那么你就可以这样做:
map $request_uri $robot_header {
default "";
~^/(.+?)/sale(.*) "noindex, nofollow";
}
您的配置非常混乱。使用正则表达式时,Nginx 将选择第一个匹配的块来满足您的请求,因此列出它们的顺序很重要。
您可以在汽车位置块内嵌套另一个 php 块并在其中添加标头。如果您将 php 处理程序指定为上游服务器,则不必每次都包含所有 fastcgi 参数,这样可以使事情变得更整洁。
答案2
所以...经过一夜好眠,我想到了一个解决方案。这是一个非常肮脏的修复方法,但它实际上是我特定情况下唯一有效的方法:
在 http 块中我添加:
map $request_uri $robot_header1 {
default "";
~^/cars/sale(.*) "noindex, nofollow";
}
map $request_uri $robot_header2 {
default "";
~^/bikes/sale(.*) "noindex, nofollow";
}
map $request_uri $robot_header3 {
default "";
~^/motorbikes/sale(.*) "noindex, nofollow";
}
(这些只是三个示例,但实际上我在 http 块中包含的文件中生成了约 200 个这样的示例)
在服务器块中我添加了:
add_header X-Robots-Tag $robot_header1;
add_header X-Robots-Tag $robot_header2;
add_header X-Robots-Tag $robot_header3;
...
我还必须将 Nginx 参数“variables_hash_bucket_size”增加到 512,因为默认值 64 不足以容纳我需要的那么多变量。所以,我希望这也能帮助其他人……