Назад | Перейти на главную страницу

Файл перезаписи URL-адреса Nginx не найден

Я преобразовал свой .htaccess для работы с Nginx, но у меня много ошибок 404 или неправильное отображение для перезаписи папок и подпапок.

Эта конфигурация Nginx работает для папки и подпапки, но для /view/ это собирается /home/website/www/index.php

то .htaccess:

RewriteRule ^view/execute(.+)$ /home/website/view/exec.php?r=$1 [QSA,L]
RewriteRule ^view/status$ /home/website/view/status.php [QSA,L]

RewriteRule ^(.+)/$ /home/website/www/index.php?a=$1 [QSA,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ /home/website/www/index.php?a=$1 [QSA,L]

И конфигурация Nginx:

listen   80; ## listen for ipv4; this line is default and implied
listen   [::]:80 default_server ipv6only=on; ## listen for ipv6

root /home/website/www;
index index.php index.html index.htm;

# Make site accessible from http://localhost/
server_name example.com;

error_page 404 /home/website/error/index.php?er=404;

location / {
    set $1 "/index.php";
    try_files $uri $uri/ @rewrites;
    root   /home/website/www;
    index  index.php index.html index.htm;
}

location ~ \.php$ {
        try_files $uri /index.php @rewrites =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
}

# rewrites
location @rewrites {
   rewrite ^/(.*)$ /home/website/www/index.php?a=$1;
   rewrite ^view/execute(.*)$ /home/website/view/execute.php?a=$1;
   #rewrite ^view/(.*)$ /home/website/view/index.php?a=$1 last;
}

Спасибо.

редактировать

У меня такая ошибка: [error] 2329#0: *1 FastCGI sent in stderr: "Unable to open primary script: /home/website/www/home/website/www/index.php (No such file or directory)" while reading response header from upstream, request: "GET /view/execute/ HTTP/1.1", upstream: "fastcgi://unix:/var/run/php5-fpm.sock:"

С псевдонимом

location / {
    try_files $uri $uri/ /index.php?a=$uri;
}
location /view/execute {
    index test.txt;
    alias /home/website/view;
}

Его работа с test.txt но если я изменюсь с test.php у меня эта ошибка 'No input file specified.'

Моя папка такая:

- /home/
  - /website/
    - /view/
      - execute.php
      - test.php
      - test.txt
    - /www/
      - index.php 
    - /function/

URL-адрес, подобный этому example.com/registre/confirm, работает, но этот URL-адрес example.com/view/execute не работает: / Я тестировал, чтобы дать разрешение + x с рекурсией для папки / просмотра /, но тоже не работает

Извините за весь этот вопрос, я нуб лол

Ваша конфигурация nginx совсем не подходит. Попробуйте что-то вроде этого:

listen 80;
listen [::]:80 default_server ipv6only=on;

root /home/website/www;
index index.php index.html index.htm;

server_name example.com;

error_page 404 /home/website/error/index.php?er=404;

location / {
    rewrite ^view/execute(.*)$ /home/website/view/execute.php?a=$1;
    try_files $uri $uri/ /home/website/www/index.php?a=$uri;
}

location ~ \.php$ {
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_pass unix:/var/run/php5-fpm.sock;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
}

Итак, основными проблемами в вашей конфигурации были:

  1. строки перезаписи были в неправильном порядке в блоке @rewrites, поэтому последняя перезапись никогда не была достигнута, потому что первое правило перезаписи всегда совпадало.
  2. Блок местоположения PHP имел ненужное правило try_files, которое могло вызвать проблемы с файлами PHP.

Если приведенная выше конфигурация не работает, вы можете попробовать заменить try_files строка с этими строками:

rewrite ^/(.*)$ /home/website/www/index.php?a=$1;
try_files $uri $uri/ =404;