Робота з посиланнями другого рівня через .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

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