
Also, ich habe in den letzten acht Stunden versucht, das herauszufinden, aber anscheinend stecke ich fest ...
Ich habe die folgende Nginx-Konfigurationsdatei:
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;
}
}
Das Problem ist, dass der X-Robots-Tag vom Standort „/cars/sale“ nicht hinzugefügt wird, egal was ich versucht habe. Ich vermute, dass dies daran liegt, dass die Anfrage an den endgültigen „.php“-Standort weitergeleitet wird, wo alle zuvor hinzugefügten Header vergessen werden. Gibt es eine Möglichkeit, diesen Header nur für diesen bestimmten Standort hinzuzufügen, ohne more_set_headers zu verwenden?
Antwort1
Eigentlich können Sie einfach Folgendes tun:
map $request_uri $robot_header {
default "";
~^/cars/sale(.*) "noindex, nofollow";
~^/bikes/sale(.*) "noindex, nofollow";
~^/motorbikes/sale(.*) "noindex, nofollow";
}
Wenn sie aber alle diesem Muster folgen, können Sie einfach Folgendes tun:
map $request_uri $robot_header {
default "";
~^/(.+?)/sale(.*) "noindex, nofollow";
}
Ihre Konfiguration ist ziemlich chaotisch. Wenn Sie reguläre Ausdrücke verwenden, wählt Nginx den ersten passenden Block aus, um Ihre Anfrage zu erfüllen. Daher ist die Reihenfolge, in der Sie sie auflisten, wichtig.
Sie können einen weiteren PHP-Block in Ihren Standortblock für Autos einbetten und dort den Header hinzufügen. Wenn Sie den PHP-Handler als Upstream-Server angeben, müssen Sie nicht jedes Mal alle FastCGI-Parameter angeben, was die Dinge übersichtlicher macht.
Antwort2
Also... ich habe mir nach einer erholsamen Nacht eine Lösung überlegt. Es ist eine sehr schmutzige Lösung, aber in meinem speziellen Fall ist es buchstäblich das Einzige, was funktioniert:
Im http-Block füge ich hinzu:
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";
}
(Dies sind nur drei als Beispiele, aber ich habe tatsächlich ca. 200 davon in einer Datei generiert, die ich in den HTTP-Block einfüge.)
Und im Serverblock habe ich hinzugefügt:
add_header X-Robots-Tag $robot_header1;
add_header X-Robots-Tag $robot_header2;
add_header X-Robots-Tag $robot_header3;
...
Ich musste auch den Nginx-Parameter „variables_hash_bucket_size“ auf 512 erhöhen, da der Standardwert von 64 für so viele Variablen, wie ich sie brauchte, nicht ausreicht. Ich hoffe also, dass dies auch jemand anderem hilft ...