Umschreiben der Nginx-URL. Ich verstehe es einfach nicht

7

Ok, eine Beispiel-URL ist

http://www.mysite.com/?p=account&view=settings

Der pUri ist eine Konstante. Alle URLs haben es.

Das viewist eines von vielen optionalen Uri.

Ich habe versucht, das Umschreiben von URLs und Regex zu verstehen, aber ich verstehe es einfach nicht. Ich muss wieder Code schreiben, aber leider komme ich immer wieder zurück, nginx.confum mehr Strafe zu bekommen.

Mein Ziel ist es, die URLs so umzuschreiben:

http://www.mysite.com/account/view/settings

Ich würde Ihnen die Dinge zeigen, die ich versucht habe, aber es ist nur das Kopieren und Einfügen vieler vorheriger Beispiele, um zu beweisen, wie erbärmlich ich bin, die Konzepte von Regex und URL-Umschreiben zu verstehen.

Wenn jemand ein paar Minuten brauchen könnte, um den Regex-Teil zu erklären, oder mich mit einem guten Tutorial zum Verständnis verknüpfen würde, würde ich mich freuen.

Nein, ich erwarte nicht, dass Sie die Arbeit für mich erledigen, aber ich bitte demütig um ein wenig Hilfe, um die Konzepte des Umschreibens und die in nginx conf zu verwendenden Variablen zu verstehen. Ich kann sehen, dass man heißt $uri, habe aber keine Ahnung, was das alles bedeutet. Ich muss auch einen regulären Ausdruck hinzufügen, um den direkten Zugriff auf PHP-Skripte im /socketund zu verweigern /private, aber den Zugriff über Ajax zuzulassen. Ich bin sicher, dass ich wahrscheinlich alles, was ich über Regex gelernt habe, auf diese Aufgabe anwenden kann.

die standortblöcke meiner nginx conf

location ~ \.(hh|php)$ {
    fastcgi_keep_conn on;
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include        fastcgi_params;
}
location ~* .(png|gif|ico|css|js)$ {
    expires 365d;
}   
location ~ .(aspx|jsp|cgi)$ {
    return 410;
}
location /socket {
    return 405;
}
location /private {
    return 405;
}   
location / {
    # include /etc/nginx/naxsi.rules;
    index index.php;
    try_files    $uri $uri/ /index.php?q=$uri?;
    limit_req zone=one burst=5;
}

location /Denied {
    return 418;
}
error_page 500 /error.php?type=500;
error_page 501 /error.php?type=501;
error_page 502 /error.php?type=502;
error_page 503 /error.php?type=503;
error_page 400 /error.php?type=400;
error_page 401 /error.php?type=401;
error_page 403 /error.php?type=403;
error_page 404 /error.php?type=404;
error_page 405 /error.php?type=405;
error_page 406 /error.php?type=406;
error_page 413 /error.php?type=413;
error_page 414 /error.php?type=414;
error_page 418 /error.php?type=418;
r3wt
quelle
Wenn möglich, sollte das Anwendungshandle die hübschen URLs in alles übersetzen, was getan werden muss.
Michael Hampton

Antworten:

8

Ich glaube, dass diese Website Ihnen sehr helfen kann:

http://regex101.com/r/uP4nT1

Vasili Syrakis
quelle
Das ist ok. Konnten Sie es auf Ihre Umschreiberegeln anwenden?
Vasili Syrakis
Nein, ich habe es noch nicht versucht. Dank der Syntaxhervorhebung und der Erklärung fange ich an zu verstehen, was in der Regex vor sich geht. Ansicht ist leider nur ein Argument der Rechnung. Ich habe auch noch ein paar zu schreiben
r3wt
Wenn Sie dazu kommen, einige Regeln zu schreiben, wenn Sie mehr Hilfe benötigen, würde ich das Regex-Tag von Stackoverflow ausprobieren, die Leute springen sehr schnell auf Regex-Fragen :)
Vasili Syrakis
1
Basierend auf dem, was du mir gegeben hast, habe ich festgestellt, dass dies für das funktioniert, was ich brauche : ^\?p=([^&]*)&([^&]*)=([^&]*). Jetzt, wo ich das Regex-Muster kenne, weiß ich immer noch nicht, was ich in die nginx.conf einfügen soll.
r3wt
1

Du brauchst

location /yourlocations {
   if ($args ~* "p=[a-z]*&view=[a-z]*") {
        rewrite ^ http://yourwebsite.com/$arg_p/$arg_view? last;
        }

}

Wenn Sie die "Ansicht" erfassen möchten, sollten Sie das Programm so gestalten, dass diese Ansicht ein Argument wie das folgende ist: yourwebsite.com/?p=test&second=test2&third=test3, damit Sie Folgendes haben können:

location /yourlocations {
       if ($args ~* "p=[a-z]*&second=[a-z]*&third=[a-z]*") {
            rewrite ^ http://yourwebsite.com/$arg_p/$arg_second/$arg_third? last;
       }

}
timmeyh
quelle
danke, ich habe es versucht, aber es hat nicht funktioniert
r3wt
1
Versuchen Sie if ($args ~* "p=[a-z]*&view=[a-z]*"), das /?Teil von Anfang an zu verwenden. $ args ist der Teil der URL nach? Zeichen, also passend /? es ist sinnlos.
Tero Kilkanen
@TeroKilkanen Mein schlechtes, schrieb es ohne zu überprüfen ...
timmeyh