Web Мастерская Блог
Сообщество Web Мастеров. Тут собрано всё, чтобы написать свой первый сайт, запустить его в Интернет и поддерживать его в течении всей его работы.
Nginx: Удаление параметров в URL
Где есть пагинация (1, 2, 3, и так далее), например, тема форума, первая страница может открываться по трем адресам:
Параметр
Имея возможность редактировать конфигурацию Nginx, я решил переписать удаление параметров в Nginx. Важно было, чтобы параметр бул удален только при значении
...
- site/forum/thread/xxx/
- site/forum/thread/xxx/page_0/
- site/forum/thread/xxx/page_1/
Параметр
page_X
нужен начиная со второй страницы, но ни как не первой. На то, что одна страница открывается по нескольким адресам, могут ругаться поисковые системы. Я избавился от ненужного параметра для первых страниц, где есть пагинация, на PHP:
// Удаление "page_0" | "page_1" из URL
if (preg_match('/page_(0|1)?\//i', $url) && stristr($url, 'admincp/') === false)
{
$url = preg_replace('/page_(0|1)?\//', '', $url);
} // End: Удаление "page_0" | "page_1" из URL
Имея возможность редактировать конфигурацию Nginx, я решил переписать удаление параметров в Nginx. Важно было, чтобы параметр бул удален только при значении
0
и 1
, значения 10
, 11
, 12
и так далее, оставались. Сделал в server
:
# Удаление "page_0" | "page_1" из URL
location ~* ^(.*)/page_(0|1)/$ {
return 301
- Жалоба
Nginx: Добавление слеша в конце URL, если его там нет
Ранее страницы моего сайта открывались, как с слэшем в конце URL, так и без него. Чтобы не допустить дублей страниц, я решил, что мой сайт будет работать только с слэшем в конце URL. Проверку слэша и его добавления делал на PHP:
Слэш добавляется ко всем URL, кроме тех, что имеют на конце:
Всё работает отлично, но грешно делать это на PHP, если есть Nginx... Поискав в интернете решение моей задачи, нашёл такую строку кода:
Данный код добавляет слэш в конец всем URL, кроме тех, где есть точка (
Вставил строку в
...
// Добавление слеша в конце URL, если его там нет
if (substr($url, -1) != '/')
{
if (!preg_match('/(.*)\.(jpg|jpeg|gif|png|js|css|ico)/i', $url))
{
$url = $url . '/';
}
} // End: Добавление слеша в конце URL, если его там нет
Слэш добавляется ко всем URL, кроме тех, что имеют на конце:
jpg|jpeg|gif|png|js|css|ico
.Всё работает отлично, но грешно делать это на PHP, если есть Nginx... Поискав в интернете решение моей задачи, нашёл такую строку кода:
rewrite ^([^.\?]*[^/])$ $1/ permanent;
Данный код добавляет слэш в конец всем URL, кроме тех, где есть точка (
.
) или параметры (id=1
). А значит картинки, к которым будут обращаться на прямую, остаются без слэша.Вставил строку в
location
:
location / {
rewrite ^([^.\?]*[^/])$ $1/
Nginx: Удаление лишних слэшев в URL
Ранее я удалял лишние слэши, при помощи PHP. Делал так:
Сегодня, наконец то, дошли руки, чтобы перенести удаление лишних слэшев в конфиг Nginx. Я добавил в
После чего перечитал конфигурацию, при помощи команды:
Теперь код в PHP удаляю, больше он не нужен. Работает Nginx.
Возможно, будет интересно:
- Блог: Nginx: Добавление слеша в конце URL, если его там нет
- Блог: Nginx: Удаление параметров в URL...
// Удаление лишних слешев
if (preg_match('/\/{2,}/i', $url))
{
$url = preg_replace('/\/{2,}/', '$1/', $url);
} // End: Удаление лишних слешев
Сегодня, наконец то, дошли руки, чтобы перенести удаление лишних слэшев в конфиг Nginx. Я добавил в
server
следующий код:
# Удаление лишних слешев
if ($request_uri ~ "//") {
return 301 $uri;
} # End: Удаление лишних слешев
После чего перечитал конфигурацию, при помощи команды:
nginx -s reload
Теперь код в PHP удаляю, больше он не нужен. Работает Nginx.
Возможно, будет интересно:
- Блог: Nginx: Добавление слеша в конце URL, если его там нет
- Блог: Nginx: Удаление параметров в URL...
MySQL: Как закомментировать строку в запросе
Чтобы закомментировать строку в запросе, используйте двойной дефис (
...
--
):
SELECT field -- Список полей
FROM table -- Название таблицы
Как получить значения массивов по одному ключу
Потребовалось получить из массива (С массивами) массив всех значений одного ключа. В этом мне помогла функция
Допустим, у нас есть такой массив:
И нам необходимо получить все имена. Делаем так:
Теперь у нас есть массив
...
array_column
, чьё предназначение как раз отдавать массив из значений одного ключа входного массива.Допустим, у нас есть такой массив:
$array = [
[
'name' => 'Юля',
'age' => 11
],
[
'name' => 'Никита',
'age' => 8
],
[
'name' => 'Данила',
'age' => 4
]
];
И нам необходимо получить все имена. Делаем так:
$name = array_column($array, 'name');
Теперь у нас есть массив
$name
с таким содержимым:
Array
(
[0] => Юля
[1] => Никита
[2] => Данила
)
- Apache 6
- CMS 3
- CSS 12
- FTP 1
- HTML 10
- JavaScript 32
- MySQL 16
- Nginx 7
- PHP 41
- phpMyAdmin 2
- SVG 3
- URL 1
- XML 3
- Безопасность 4
- Библиотека JS 12
- Графика 1
- Доменное имя 1
- Инструкция 1
- Кодировка 2
- Контент 6
- Мнение 2
- Монетизация сайта 2
- Настройка 3
- Оптимизация 2
- Ошибка 7
- Поисковая система 1
- Продвижение сайта 6
- Софт 1
- Старт 2
- Функция 1
- Хостинг | Сервер 3