2016-04-22 3 views
1

Im пытается переписать URL, как показано ниже:Nginx правило перезаписи для вложенной

https://example.com/products/product-post ---> https://example.com/product-post 

Но я хочу в то же время URL https://example.com/products/, чтобы быть доступным, без каких-либо изменений с момента своего каталога продукции.

Это не работает вызывает ошибку 500 сервера:

location /products/ { 
    rewrite ^/(.*)$ /products/$1 last; 
} 

Для организации причины я держать мои файлы в каталоге/продукции/file1, file2 и т.д. Возможно, я должен использовать «псевдоним», а не «переписывания «?

спасибо.

UPDATE: Ниже мой server.conf конфигурации

server { 
    server_name  www.example.com; 
    listen   80; 
    listen   443 ssl spdy; 
    listen   [::]:80; 
    listen   [::]:443 ssl spdy; 
    ssl_certificate /opt/ssl/example.com.chained.crt; 
    ssl_certificate_key /opt/ssl/example.com.key; 
    # Non-www redirect 
    return   301 https://example.com$request_uri; 
} 
server { 
    server_name  example.com; 
    listen   443 ssl spdy; 
    listen   [::]:443 ssl spdy; 
    root   /home/html_public; 
    charset  UTF-8; 
    ssl_certificate /opt/ssl/example.com.chained.crt; 
    ssl_certificate_key /opt/ssl/example.com.key; 
    add_header Strict-Transport-Security 'max-age=31536000; includeSubDomains; preload'; 
    ssl_prefer_server_ciphers on; 
    ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH"; 
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2; 
    ssl_session_cache shared:SSL:10m; 
    ssl_session_timeout 10m; 
    keepalive_timeout 70; 
    ssl_buffer_size 1400; 
    ssl_stapling on; 
    ssl_stapling_verify on; 
    resolver 8.8.8.8 8.8.4.4 valid=86400; 
    resolver_timeout 10; 
    ssl_trusted_certificate /opt/ssl/example.com.chained.crt; 
location ~* \.(jpg|jpeg|gif|png|ico|cur|gz|svgz|mp4|ogg|ogv|webm|htc|css|js|otf|eot|svg|ttf|woff|woff2)(\?ver=[0-9.]+)?$ { 
    expires 1M; 
    add_header Pragma public; 
    add_header Cache-Control "public, must-revalidate, proxy-revalidate"; 
    access_log off; 
    } 
    #access_log logs/host.access.log main; 
    #===BAN COUNTRIES START ============== 
    if ($allowed_country = no) { 
    return 403; 
    } 
    if ($bad_referer) { 
    return 444; 
    } 
location @extensionless-php { 
    rewrite ^(.*)/$ $1.php last; 
    rewrite ^(.*[^/])$ $1/ permanent; 
    } 
location/{ 
    try_files $uri $uri/ @extensionless-php; 
    #limit_conn num_conn 15; 
    #limit_req zone=num_reqs; 
    } 
    #=====PAGE SPEED START========== 
location ~ "\.pagespeed\.([a-z]\.)?[a-z]{2}\.[^.]{10}\.[^.]+" { 
    add_header "" ""; 
    } 
location ~ "^/pagespeed_static/" { } 
location ~ "^/ngx_pagespeed_beacon$" { } 
    #=====PAGE SPEED END========== 
error_page 404 /404.php; 
#pass the PHP scripts to FastCGI server listening on php-fpm unix socket 
location ~ \.php$ { 
    try_files  $uri =404; 
    fastcgi_index index.php; 
    fastcgi_pass unix:/tmp/php5-fpm.sock; 
    fastcgi_split_path_info ^(.+\.php)(/.+)$; 
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
    fastcgi_intercept_errors on; 
    fastcgi_ignore_client_abort off; 
    fastcgi_connect_timeout 60; 
    fastcgi_send_timeout 180; 
    fastcgi_read_timeout 180; 
    fastcgi_buffer_size 128k; 
    fastcgi_buffers 4 256k; 
    fastcgi_busy_buffers_size 256k; 
    fastcgi_temp_file_write_size 256k; 
    include fastcgi_params; 
} 
location = /robots.txt { 
    access_log off; 
    log_not_found off; 
    } 
location ~ /\. { 
    deny all; 
    access_log off; 
    log_not_found off; 
    } 
#=====START phpMyAdmin==============# 
location /phpMyAdmin { 
    root /usr/share/; 
    location ~ ^/phpMyAdmin/(.+\.php)$ { 
    root  /usr/share/; 
    try_files $uri =404; 
    fastcgi_index index.php; 
    fastcgi_pass unix:/tmp/php5-fpm.sock; 
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
    include   fastcgi_params; 
    } 
    location ~* ^/phpMyAdmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ { 
    root /usr/share/; 
    } 
    } 
location /phpmyadmin { 
    rewrite ^/* /phpMyAdmin last; 
    } 
#=====END phpMyAdmin==============# 
location /webmail { 
    root /usr/share/; 
    index index.php index.html index.htm; 
    location ~ ^/webmail/(.+\.php)$ { 
    root /usr/share/; 
    try_files $uri =404; 
    fastcgi_pass unix:/tmp/php5-fpm.sock; 
    fastcgi_index index.php; 
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
    include  fastcgi_params; 
    } 
    location ~* ^/webmail/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ { 
    root /usr/share/; 
    } 
} 
    #====Out Link REDIRECTS=============== 
    location /go/ { 
    rewrite ^/go/(.*)$  /go/site-linker.php?site=$1 last; 
    } 

location ~ /products/(.+) { 
    rewrite ^/products/(.*)$ /$1 last; 
    } 
} 

В журналах им получить это:

2016/04/24 12:07:45 [notice] 6810#0: *1 "^/products/(.*)$" does not match "/xperia-z5/", client: 192.168.10.2, server: 192.168.10.1, request: "GET /xperia-z5/ HTTP/1.1", host: "192.168.10.1" 
2016/04/24 12:07:45 [notice] 6810#0: *1 "^/products/(.*)$" does not match "/xperia-z5/", client: 192.168.10.2, server: 192.168.10.1, request: "GET /xperia-z5/ HTTP/1.1", host: "192.168.10.1" 
2016/04/24 12:07:45 [notice] 6810#0: *1 "^(.*)/$" matches "/xperia-z5/", client: 192.168.10.2, server: 192.168.10.1, request: "GET /xperia-z5/ HTTP/1.1", host: "192.168.10.1" 
2016/04/24 12:07:45 [notice] 6810#0: *1 "^(.*)/$" matches "/xperia-z5/", client: 192.168.10.2, server: 192.168.10.1, request: "GET /xperia-z5/ HTTP/1.1", host: "192.168.10.1" 
2016/04/24 12:07:45 [notice] 6810#0: *1 rewritten data: "/xperia-z5.php", args: "", client: 192.168.10.2, server: 192.168.10.1, request: "GET /xperia-z5/ HTTP/1.1", host: "192.168.10.1" 
2016/04/24 12:07:45 [notice] 6810#0: *1 rewritten data: "/xperia-z5.php", args: "", client: 192.168.10.2, server: 192.168.10.1, request: "GET /xperia-z5/ HTTP/1.1", host: "192.168.10.1" 
+0

Можете ли вы переписать целые 'продукты/товар-пост'? Таким образом, он должен работать ... –

+0

@ MichałZaborowski я получаю 404, если я делаю: (. *) 'место /products/(.*)$/ { переписывания ^/$/продукты/$ 1 последний; } ' – Skeptic

+0

https://github.com/TeXXaS/nginx-configs/tree/master/rewrite - пожалуйста, проверьте, не нарушает ли ваша система, поскольку требуется sodo. Обновить переписать в файле конфигурации, затем вы можете увидеть, что происходит - см. Файл журнала –

ответ

0

После многих проб и ошибок, то sulution оказался:

location/{ 
    try_files $uri $uri/ @extensionless-php; 
    rewrite /(.+$) /products/$1 break; 
    } 
location = /products/ { 
    index index.php; 
} 

Я надеюсь, что это поможет кому-то в будущем.

Смежные вопросы