Щоб .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
Перевірте, чи працюють запити на двох рівнях, і чи коректно обробляються запити, які не знаходять відповідних файлів.