Я работал над этим весь день, и мне до сих пор не везет. Я использовал онлайн-конвертер .htaccess для конфигурации, поэтому не думаю, что он все правильно преобразовал.
Ниже приведен мой файл .htaccess.
RewriteCond %{QUERY_STRING} ^$
RewriteRule ^((.)?)$ index.php?p=home [L]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^(.*)$ $1 [QSA,L]
RewriteCond $1 !^(\#(.)*|\?(.)*|\.htaccess(.)*|\.htaccess\.back(.)*|.idea\/(.)*|.svn\/(.)*|admin\.php(.)*|content\/(.)*|download\.php(.)*|ecc\/(.)*|images\/(.)*|index\.php(.)*|install\/(.)*|login\.php(.)*|readme\.txt(.)*|robots\.txt(.)*)
RewriteRule ^(.+)$ index.php?url=$1&%{QUERY_STRING} [L]
И моя преобразованная конфигурация nginx
try_files $uri $uri/ /index.php?url=$uri&$args;
location / {
if ($query_string ~ "^$"){
rewrite ^/((.)?)$ /index.php?p=home break;
}
if (-e $request_filename){
rewrite ^(.*)$ /$1 break;
}
rewrite ^(.+)$ /index.php?url=$1&$query_string break;
}
location ~* (^(?!(?:(?!(php|inc)).)*/uploads/).*?(php)) {
try_files $uri = 404;
fastcgi_split_path_info ^(.+.php)(.*)$;
fastcgi_pass unix:/tmp/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include /etc/nginx/fastcgi_params;
}
Что происходит, когда я пытаюсь перейти по URL-адресу, например /admin.php?p=settings&group=3
, он перенаправляет меня (потому что я считаю, что он не несет строку запроса) к имени входа. Когда я иду к чему-то вроде /index.php?p=login
или /index.php?p=signup
работает правильно.
Может ли кто-нибудь помочь мне в этом. -Джон
Я думаю, что вы делаете ошибку, пытаясь перевести htaccess в nginx conf. Эти два стиля конфигурации совершенно разные. Лучше попытаться реализовать логика вашего htaccess в nginx.
Итак, ваш htaccess делает следующее:
Итак, возможно, что-то вроде этого (непроверено):
# Block some bad requests [3], only included a few here to get the idea
location ~ (\.svn|\.htaccess|\.last|robots\.txt) {
deny all;
}
location / {
# see if a file or dir corresponding to the request exists and use that [2]
try_files $uri $uri/ @rewrite;
}
# Rewrites [1] + [3]
location @rewrite {
rewrite ^$ /index.php?p=home break;
rewrite $(.*)$ /index.php?url=$1;
}
location ~ \.php$ {
try_files $uri $uri/ /index.php?url=$uri&$args;
fastcgi_pass unix:/tmp/php5-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include /etc/nginx/fastcgi_params;
}
Как я уже сказал, не тестировалось, но это больше похоже на nginx.