Я преобразовал свой .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;
}
Итак, основными проблемами в вашей конфигурации были:
Если приведенная выше конфигурация не работает, вы можете попробовать заменить try_files
строка с этими строками:
rewrite ^/(.*)$ /home/website/www/index.php?a=$1;
try_files $uri $uri/ =404;