Есть самописный скрипт, в котором есть возможность включать ЧПУ из админки, но кофиги решил не прилагать так как много разных http-серверов.
Что имеем:
файл classes.php в который содержит разные функции, одна из которых отвечает за формирование permalinks
function permalink($url) {
// url: the URL to be rewritten
global $settings;
if($settings['permalinks']) {
$path['profile'] = 'index.php?a=profile';
$path['group'] = 'index.php?a=group';
$path['page'] = 'index.php?a=page';
$path['feed'] = 'index.php?a=feed';
$path['notifications'] = 'index.php?a=notifications';
$path['settings'] = 'index.php?a=settings';
$path['messages'] = 'index.php?a=messages';
$path['post'] = 'index.php?a=post';
$path['search'] = 'index.php?a=search';
$path['info'] = 'index.php?a=info';
$path['welcome'] = 'index.php?a=welcome';
$path['recover'] = 'index.php?a=recover';
$path['thumb'] = 'thumb.php';
if(strpos($url, $path['profile'])) {
$url = str_replace(array($path['profile'], '&u=', '&r=', '&filter='), array('profile', '/', '/', '/filter/'), $url);
} elseif(strpos($url, $path['group'])) {
$url = str_replace(array($path['group'], '&name=', '&r=', '&search=', '&friends=', '&deleted='), array('group', '/', '/', '/search/', '/friends/', '/deleted/'), $url);
} elseif(strpos($url, $path['page'])) {
$url = str_replace(array($path['page'], '&name=', '&r=', '&friends=', '&deleted='), array('page', '/', '/', '/friends/', '/deleted/'), $url);
} elseif(strpos($url, $path['feed'])) {
$url = str_replace(array($path['feed'], '&filter=', '&logout', '&token_id='), array('feed', '/filter/', '/logout', ''), $url);
} elseif(strpos($url, $path['notifications'])) {
$url = str_replace(array($path['notifications'], '&filter='), array('notifications', '/filter/'), $url);
} elseif(strpos($url, $path['settings'])) {
$url = str_replace(array($path['settings'], '&b='), array('settings', '/'), $url);
} elseif(strpos($url, $path['messages'])) {
$url = str_replace(array($path['messages'], '&u=', '&id='), array('messages', '/', '/'), $url);
} elseif(strpos($url, $path['post'])) {
$url = str_replace(array($path['post'], '&m='), array('post', '/'), $url);
} elseif(strpos($url, $path['search'])) {
$url = str_replace(array($path['search'], '&q=', '&tag=', '&pages=', '&groups=', '&filter=', '&age='), array('search', '/', '/tag/', '/pages/', '/groups/', '/filter/', '/age/'), $url);
} elseif(strpos($url, $path['info'])) {
$url = str_replace(array($path['info'], '&b='), array('info', '/'), $url);
} elseif(strpos($url, $path['welcome'])) {
$url = str_replace(array($path['welcome']), array('welcome'), $url);
} elseif(strpos($url, $path['recover'])) {
$url = str_replace(array($path['recover'], '&r=1'), array('recover', '/do/'), $url);
} elseif(strpos($url, $path['thumb'])) {
$url = str_replace(array($path['thumb'], '?t=', '&w=', '&h=', '&src='), array('thumb', '/', '/', '/', '/'), $url);
}
}
return $url;
}
файл thumb.php (сделан на основе
TimThumb как я понял)
https://pastebin.com/viKEGndg
Мой недо-конфиг
server {
listen 80 default_server;
listen [::]:80 default_server;
root /usr/local/openresty/nginx/html/default/public;
index index.php index.html index.htm;
server_name _;
location / {
try_files $uri $uri/ @php;
}
location @php {
rewrite ^/(.*) /index.php?a=$1;
}
location ~ \.php {
try_files $uri = 404;
#fastcgi_pass 127.0.0.1:9000;
fastcgi_pass unix:/run/php/php7.3-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_index index.php;
include fastcgi_params;
}
# Server error pages to the static page /404.html.
error_page 404 /404.html;
location = /404.html {
root /usr/local/openresty/nginx/html;
}
# Server error pages to the static page /50x.html.
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/local/openresty/nginx/html;
}
}
С чем проблемы:
Ссылки сокращаются, но реальный переход только
index.php?a=feed сокращается до
/feed и
index.php?a=welcome до
/welcome соответственно, остальные ссылки не исполняются - контент либо страницы /welcome (в случае если пользователь не авторизован) или /feed (пользователь авторизован, в этом случае работает ещё
index.php?a=settings но при переходе глубже - опять выкидывает на начальную страницу /feed с адресом вида
/settings/avatar), адрес при этом меняется.
Thumb.php при при любом состоянии настройки Permalinks возвращает все динамические картинки с кодом 404
DOMAIN/thumb.php?t=a&w=50&h=50&src=default.png - Permalinks OFF
DOMAIN/thumb/a/50/50/default.png - Permalinks ON
Если кому интересно решить задачку, добро пожаловать.