У меня есть блог, закодированный php с несколькими статьями, но для чтения сообщения URL должен быть как http://myblog/post.php?url=an-article-tilte&id=7
.Переписать URL с NGINX
Я хочу сделать самый умный способ доступа к статьям с их URL (и для улучшения ссылок). В моей базе данных каждая статья имеет атрибут url
, который содержит его название в 'kebab-case' (например, «Добро пожаловать в мой блог» будет «Добро пожаловать в мой блог»).
Подводя итог, для доступа к сообщению «Добро пожаловать в мой блог» (с идентификатором, равным 7), я бы набрал http://myblog.com/post/welcome-to-my-blog-7
, а не http://myblog.com/post.php?url=welcome-to-my-blog&id=7
.
В моем файле конфигурации Nginx блоге у меня есть это:
server {
listen 80;
root /opt/http/nginx/sites/myblog/www;
index index.php index.html;
server_name myblog.com www.myblog.com;
location/{
try_files $uri $uri/ /index.php;
}
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 365d;
}
location ~* \.(pdf)$ {
expires 30d;
}
client_max_body_size 3M;
error_page 403 /index.php;
# pass the PHP scripts to FastCGI server listening on /var/run/php5-fpm.sock
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
gzip on;
gzip_min_length 1100;
gzip_buffers 4 32k;
gzip_types text/plain application/x-javascript text/xml text/css;
gzip_vary on;
access_log /var/log/nginx/www.myblog.access.log;
error_log /var/log/nginx/www.myblog.error.log;
}
И я предполагаю, что я должен положить внутри что-то вроде этого, но это делает ошибку, когда я пытаюсь перезагрузить Nginx. Поэтому я не знаю, что в этом плохого.
location @rewrites {
if ($uri ~* ^/post/([a-zA-Z0-0\-]+)-([0-9]+)) {
rewrite ^/post.php?url=$1&id=$2;
}
}
С apache это было легко, но есть ли способ воспроизвести его на nginx?
Я поддержал ваш ответ, потому что это именно то, что я искал! И теперь у меня есть ссылка 404 на ссылку 'http: // myblog.com/post/a-example-article-8'. Но я уверен, что мы это разрешим! –
@MaximeLafarie: попробуйте решение, предлагаемое в обновлении, я думаю, это то, что вам нужно. –
Мне очень жаль, ваш первый ответ работает как шарм! Я забыл, что мой блог находится в «блоге», а затем мне пришлось адаптировать ваш ответ с добавлением «/ blog» перед всеми «/» в коде. Я делал это везде, но я забыл сделать это здесь: '/post.php?url=$1 &id=$2;'. Спасибо за ваш ответ, это именно то, что я искал, и благодаря вам я теперь понимаю, как работает nginx url rewriting. –