Я рискую теперь в nginx, переписывают правила, таким образом, это - довольно новая тема для меня.
У меня есть в корневой папке ряд страниц, которые я использую, переписывают правила следующим образом:
server {
listen 80;
## listen [::]:80 default_server ipv6only=on;
listen 443 ssl;
root /nginx/gtt/;
index index.html index.htm index.php gttindex.php;
# Make site accessible from http://localhost/
server_name gtt.deb;
ssl_certificate /etc/nginx/ssl/nginx.crt;
ssl_certificate_key /etc/nginx/ssl/nginx.key;
client_max_body_size 10M;
# When access gps page just show gps
if ( $request_uri = "/gps" ) {
rewrite ^ /gps.lf.ws.vh.sprite.php break;
}
# Administration
if ( $request_uri = "/setup" ) {
rewrite ^ /admin.php break;
}
# For clientadmin show admin
if ( $request_uri = "/error" ) {
rewrite ^ /gttindex.php?WARNING=wrongcredentials break;
}
rewrite ^/cargo(.*)$/(.*)$ /clientadmin/edit_task_details_form_multi$1.php?taskid=$2 break;
rewrite ^/cargoadmin /clientadmin/admin.php last;
location / {
index index.html index.htm index.php gttindex.php;
try_files $uri $uri/ =404;
}
}
перенаправит к admin.php
Проблема возникает, когда я должен переписать в подпапке, которая содержит 4 сценария PHP:
admin.php
edit_task_details_form.php
edit_task_details_form_multi2.php
edit_task_details_form_multi3.php
Это не работает и /cargo2/var
или /cargo3/var
(в зависимости от которого я выбираю), добавляются к URL.
То, чего я хотел бы достигнуть, следующее:
http://gtt.deb/clientadmin/admin.php -> http://gtt.deb/cargoadmin
http://gtt.deb/clientadmin/edit_task_details_form_multi.php?task=1 -> http://gtt.deb/cargo/1
http://gtt.deb/clientadmin/edit_task_details_form_multi2.php?task=1 -> http://gtt.deb/cargo2/1
http://gtt.deb/clientadmin/edit_task_details_form_multi3.php?task=1 -> http://gtt.deb/cargo3/1
Вы неправильно используете директиву rewrite
. Вы не используете , если
с правилами rewrite
.
Вы должны написать свои текущие правила следующим образом:
rewrite ^/gps$ /gps.lf.ws.vh.sprite.php break;
rewrite ^/setup$ /admin.php break;
rewrite ^/error$ /gttindex.php?WARNING=wrongcredentials break;
И скорее всего вы должны использовать последнее
вместо break
в правилах.
Что касается актуальной проблемы, попробуйте переписать так:
rewrite ^/cargoadmin$ /clientadmin/admin.php;
rewrite ^/cargo([0-9]?)/([0-9]+)$ /clientadmin/edit_task_details_form_multi$1.php?task=$2;
The ([0-9]?)
совпадает со всеми однозначными числами или пустой строкой, и захватывает число до $1. ([0-9]+)
соответствует многозначным числам и перехватывает их в переменную $2.
$
означает, что строка должна заканчиваться на этом, после этого не может быть лишних символов.
Другое замечание: ваша система URL выглядит довольно сложной и вполне может вызвать много проблем в дальнейшем. Я бы обратил больше внимания на разработку более простой и хорошо определенной системы для переписывания URL.
.