Робота з посиланнями другого рівня через .htaccess

Щоб .htaccess обробляв посилання другого рівня вкладення (наприклад, /url1/url2) і перенаправляв їх на url1/url2.php або на 404.php, потрібно внести наступні зміни в код, наведений в статті “Робота з Url у файлі .htaccess

Оновлений .htaccess файл:

RewriteEngine On

# Якщо файл або директорія існують, пропускаємо запит
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]

# Перевіряємо, чи є запит виду /url1/url2
RewriteCond %{REQUEST_URI} ^/([^/]+/[^/]+)$
RewriteCond %{DOCUMENT_ROOT}/$1.php -f
RewriteRule ^(.*)$ /$1.php [L]

# Перевіряємо, чи є запит виду /url
RewriteCond %{REQUEST_URI} ^/([^/]+)$
RewriteCond %{DOCUMENT_ROOT}/$1.php -f
RewriteRule ^(.*)$ /$1.php [L]

# Якщо файл не існує, перенаправляємо на 404.php
RewriteCond %{REQUEST_URI} ^/([^/]+(/[^/]+)?)$
RewriteCond %{DOCUMENT_ROOT}/%1.php !-f
RewriteRule ^(.*)$ /404.php [L]

Як це працює:

Обробка вкладених URL (/url1/url2):

Умова RewriteCond %{REQUEST_URI} ^/([^/]+/[^/]+)$ перевіряє, чи є URL двох рівнів.
Умова RewriteCond %{DOCUMENT_ROOT}/$1.php -f перевіряє, чи існує файл url1/url2.php.

Обробка однорівневих URL (/url):

Умова RewriteCond %{REQUEST_URI} ^/([^/]+)$ перевіряє, чи є URL одного рівня.
Умова RewriteCond %{DOCUMENT_ROOT}/$1.php -f перевіряє, чи існує файл url.php.

Обробка 404:

Якщо жоден з файлів не знайдено, перенаправляємо запит на 404.php.

Додаткові поради:

Якщо потрібна обробка більшої глибини вкладення (наприклад, /url1/url2/url3), можна використовувати регулярний вираз із зірочкою:
RewriteCond %{REQUEST_URI} ^/([^/]+(/[^/]+)*)$

Для налагодження правил можна тимчасово увімкнути відображення запитів:

RewriteLogLevel 3

Перевірте, чи працюють запити на двох рівнях, і чи коректно обробляються запити, які не знаходять відповідних файлів.

Робота з Url у файлі .htaccess

Напишемо скріпт в файлі .htaccess який буде переадресовувати запити /url на відповідний PHP файл url.php, а якщо файл url.php не існує, то переадресовувати на файл 404.php

RewriteEngine On

# Перевіряємо, чи запит йде до URL виду /url
RewriteCond %{REQUEST_URI} ^/([^/]+)$
RewriteCond %{DOCUMENT_ROOT}/%1.php -f
RewriteRule ^(.*)$ /$1.php [L]

# Якщо файл не існує, переадресовуємо на 404.php
RewriteCond %{REQUEST_URI} ^/([^/]+)$
RewriteCond %{DOCUMENT_ROOT}/%1.php !-f
RewriteRule ^(.*)$ /404.php [L]

Як це працює:
Перша умова:

RewriteCond %{REQUEST_URI} ^/([^/]+)$ — перевіряє, чи є запит до URL вигляду /url.
RewriteCond %{DOCUMENT_ROOT}/%1.php -f — перевіряє, чи існує файл url.php у кореневій директорії.
Якщо умови виконуються, URL перенаправляється на відповідний файл PHP.

Друга умова:

Якщо файл url.php не існує, переадресовуємо запит на 404.php.

Додатково:

Переконайтеся, що у вас ввімкнений модуль mod_rewrite у конфігурації сервера Apache.
Якщо 404.php повинен знаходитися у певному підкаталозі, змініть шлях у відповідному правилі.

Помилка 500 Internal Server Error зазвичай виникає через помилки у конфігурації .htaccess. Давайте перевіримо код і виправимо можливі проблеми.
Оновлений .htaccess файл

RewriteEngine On

# Якщо файл або директорія існують, пропускаємо запит
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]

# Перевіряємо, чи є запит типу /url
RewriteCond %{REQUEST_URI} ^/([^/]+)$
RewriteCond %{DOCUMENT_ROOT}/$1.php -f
RewriteRule ^(.*)$ /$1.php [L]

# Якщо файл не існує, переадресовуємо на 404.php
RewriteCond %{REQUEST_URI} ^/([^/]+)$
RewriteCond %{DOCUMENT_ROOT}/$1.php !-f
RewriteRule ^(.*)$ /404.php [L]

Зміни:

Перша перевірка:

 Додано правило, яке дозволяє серверу обробляти запити до існуючих файлів та директорій без втручання mod_rewrite.

Перевірка імен файлів:

Забезпечено правильну перевірку на існування файлу PHP.

Скориговано умови:

Умова RewriteCond %{DOCUMENT_ROOT}/%1.php -f правильно обробляє файли.

Дії для виправлення:
Перевірте наявність модуля mod_rewrite:

У файлі конфігурації Apache (зазвичай httpd.conf або apache2.conf), переконайтеся, що модуль увімкнено:
sudo a2enmod rewrite
sudo systemctl restart apache2

Перевірте дозволи на файли:

Усі файли та директорії повинні мати відповідні права доступу. Наприклад:
chmod 644 *.php

Увімкніть відображення помилок Apache.
Увімкніть журнал помилок, щоб побачити точну причину:

LogLevel debug
ErrorLog ${APACHE_LOG_DIR}/error.log

Перевірте конфігурацію Apache
Переконайтеся, що віртуальний хост дозволяє використання .htaccess:

<Directory /path/to/your/site>
    AllowOverride All
</Directory>

Після внесення змін перезапустіть сервер Apache:

sudo systemctl restart apache2

Якщо проблема залишається, перегляньте журнал помилок Apache (/var/log/apache2/error.log або аналогічний залежно від вашої ОС) для детального діагностування.

Три правила для тих, хто хоче почати з нуля

Початок завжди найскладніший: сумніви, страх невдачі, думки про те, що вже занадто пізно. Але кожен великий шлях починається з першого кроку. Як зробити його впевнено?

Ось три правила, які допоможуть почати з нуля:

1️⃣ Діяти, навіть якщо не ідеально.
Не чекайте, поки все буде ідеально підготовлено. Почніть із тим, що маєте, і там, де ви є. Ви здивуєтеся, як багато можна зробити маленькими кроками.

«Якщо чекати на ідеальні умови для того, щоб почати щось робити — можна ніколи не почати».

2️⃣ Оточити себе підтримкою.
Ваше оточення впливає на ваш успіх. Спілкуйтеся з тими, хто вже досягнув бажаного, або з людьми, які вірять у вас. Підтримка важлива, особливо на початку.

«Оточення формує ваші горизонти».

3️⃣ Фокусуватися на процесі, а не на результаті.
Не порівнюйте себе з тими, хто вже далеко попереду. Зосередьтеся на тому, що робите сьогодні, і поступово будуватимете своє майбутнє.

🌟 Пам’ятайте:
Усі колись починали з нуля. Головне — не зупинятися через страх чи сумніви. Маленькі кроки щодня ведуть до великих змін.

Стрілкові функції в JavaScript

Стрілкові функції в JavaScript – це не просто скорочений синтаксис, а справжні магічні стріли, які можуть зробити ваш код більш читабельним та зручним. Ось декілька цікавих речей, які ви можете робити з ними:

Короткі функції з одним виразом: Стрілкові функції ідеально підходять для коротких функцій, які повертають один результат. Наприклад:

    const numbers = [1, 2, 3, 4, 5];
    const squared = numbers.map((num) => num ** 2);
    console.log(squared); // Виведе [1, 4, 9, 16, 25]

    Callback-функції: Вони дуже зручні для використання в методах масивів, таких як mapfilterreduce:

    const numbers = [1, 2, 3, 4, 5];
    const squared = numbers.map((num) => num ** 2);
    console.log(squared); // Виведе [1, 4, 9, 16, 25]
    

    Лексичне прив’язування this: Стрілкові функції автоматично прив’язують this до контексту, в якому вони були створені. Це уникне багатьох проблем, зокрема при роботі з об’єктами та подіями.

    Ланцюги обіцянок (Promises): Стрілкові функції можна використовувати в асинхронних операціях:

    const fetchData = async () => {
        try {
            const response = await fetch('https://api.example.com/data');
            const data = await response.json();
            console.log(data);
        } catch (error) {
            console.error('Something went wrong:', error);
        }
    };
    

    Параметри за замовчуванням та розпакування: Ви можете використовувати параметри за замовчуванням та розпаковування:

    const greet = (name = 'Friend') => `Hello, ${name}!`;
    console.log(greet()); // Виведе "Hello, Friend!"
    

    Отже, стрілкові функції – це не просто стріли, вони – ваші надійні помічники у світі JavaScript! 🚀1 2 3 4 5.

    How to View Connection History Remote Desktop on Windows 10

    Windows built-in Remote Desktop Connection makes it possible to access the computer remotely.  Wonder can you check remote desktop connection history? The answer is Yes! Here in this part, we provide you with two methods to view connection history of Remote Desktop on Windows 10, 11. Check the RDP connection history via Event Viewer.

    Step 1. Press Win + R to invoke the Run dialog box, then type in “eventvwr.msc” and press OK to open Event Viewer.

    Step 2. Navigate here: Applications and Services Logs > Microsoft > Windows > TerminalServicesRemoteConnectionManager > Operational. Right-click Operational and choose Filter Current Log.

    Step 3. The EventID of Remote Desktop Services is 1149. Then enter 1149 to filter the log.

    Step 4. Then you will get an event list with the history of all RDP connections to this server.

    Step 5. Click one of them, then you can see the details of the RDP connection, including IP address, computer name, login time, etc.

    How to Grow a Linux Partition with growpart

    Resizing Linux Virtual Machine Disks

    This article will show how to grow a partition on your Linux partition to fill the entire disk using growpart. This is useful if you have resized a virtual machine disk, or moved to a larger disk on your desktop or laptop Linux system.

    Step 1: Listing and Identifying Storage Devices

    To expand the filesystem on your resized disk, you’ll need to first locate the disk using the lsblk command, execute it by running:

    lsblk

    And you will see output similar to the following listing storage devices and the partitions on them:

    Above, you can see that disk sda has a size of 50 gigabytes, but that the volume containing the root partition (sda3) is only 29.5 gigabytes – there is unused space on the storage device.

    There may be multiple entries in the output from lsblk – you’ll need to identify the disk you have resized by the size and utilization – it should be apparent which disk has unused space. Usually on single-disk machines, the first and only storage device will be named sda.

    You will also need to know the name of the partition your wish to grow – in this case sda3 – usually identified by it having the root mount point of /.

    Step 2: Installing growpart

    growpart is a utility that makes it super easy to grow a partition. It’s part of the cloud-guest-utils package. Note that while this package is intended to work on cloud-hosted virtual machines, the growpart utility also works just fine on physical machines.

    On Debian and Ubuntu, run:

    sudo apt install cloud-guest-utils

    On Arch, run:

    pacman install cloud-guest-utils

    On RedHat, run:

    yum install cloud-utils-growpart -y

    Step 3: Grow your Partition

    Once growpart is available, growing a partition to use the entire remaining disk space is as simple as running:

    sudo growpart /dev/sda 3

    You’ll need to specify the correct partition name above, replaceing sda 3 (note the space! the device and partition number are separated when using growpart) if necessary. growpart is executed with no additional parameters – if the size parameter is not specified, it will default to the available size of the partition.

    Now that the partition has been expanded, the file system must be also using resize2fs:

    sudo resize2fs /dev/sda3

    Note that the space has disappeared in the device path again.

    You will see output similar to:

    Confirming the change. Once this final step is done, reboot:

    sudo reboot

    How to flush the DNS cache in Debian GNU/Linux?

    If using systemd-resolved as your DNS resolver (i.e. the hosts line of your /etc/nsswitch.conf file includes the word resolve and/or /etc/resolv.conf contains the line nameserver 127.0.0.53), then this command will flush its cache:

    sudo systemd-resolve --flush-caches

    A newer version of this command seems to be:

    sudo resolvectl flush-caches

    How to convert WMV to MP4

    You can use FFmpeg (a free command-line tool for Mac, Linux and Windows) to encode WMV to MP4. Here is an example syntax:

    ffmpeg -i input.wmv -c:v libx264 -crf 23 -c:a aac -q:a 100 output.mp4

    This will encode the video to H.264 video and AAC audio, using the default quality. To change the quality for the video, use a different CRF value, where lower means better, e.g. 20 or 18. For audio, 100% is the default quality. Increase the value for better quality.

    For the AppleTV specifically, this is what Apple says it supports:

    H.264 video up to 1080p, 30 frames per second, High or Main Profile level 4.0 or lower, Baseline profile level 3.0 or lower with AAC-LC audio up to 160 kbit/s per channel, 48 kHz, stereo audio in .m4v, .mp4, and .mov file formats

    So, you could use the following command to force the 30 Hz frame rate and High profile:

    ffmpeg -i input.wmv -c:v libx264 -crf 23 -profile:v high -r 30 -c:a aac -q:a 100 -ar 48000 output.mp4

    How to install SSH2 extension for PHP 7.4

    If You have an error like: Call to undefined function ssh2_connect() that’s mean that in your PHP not installed ssh2 extension.

    Install this extension is very simple, in Ubuntu Linux or other Debian based distribution just use the command:

    sudo apt install php7.4-ssh2

    This command will install ssh2 extension to Your PHP 7.4. If you use other PHP version, just change number in this command to Your version.