ЧПУ .htaccess. Не открываются страницы

Не открываются URL-ссылки, только чпу в адресной строке. Алиасы и url хранятся в db. Базовый htaccess

   
    RewriteEngine on
    Options +FollowSymlinks
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ /?%{QUERY_STRING}
    

URL

/?view=section&id=1
/?view=article&id=1
/?view=reg

В RewriteRule $1 хранится алиас, но где статический URL непонятно


Ответы (1 шт):

Автор решения: DiD

Попробуйте вот так:


    # Включить RewriteEngine и резолвить симлинки
    RewriteEngine On
    Options +FollowSymLinks
    RewriteBase /
    
    # Пропускать существующие файлы и папки
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    
    # Обрабатываем сначала статичные URL
    # три примера:
    RewriteCond %{QUERY_STRING} ^view=section&id=([0-9]+)$ [NC]
    RewriteRule ^$ /index.php?view=section&id=%1 [L]
    
    RewriteCond %{QUERY_STRING} ^view=article&id=([0-9]+)$ [NC]
    RewriteRule ^$ /index.php?view=article&id=%1 [L]
    
    RewriteCond %{QUERY_STRING} ^view=reg$ [NC]
    RewriteRule ^$ /index.php?view=reg [L]
    
    # Уже после обрабатываем ЧПУ
    RewriteRule ^(.*)$ index.php?alias=$1 [L,QSA]

Вот как это работает:

  1. Сначала обрабатываются статические URL:
  • Когда приходит запрос вида /?view=section&id=1, он обрабатывается первым блоком правил

  • %1 содержит значение из первой круглой скобки в RewriteCond

  1. Затем обрабатываются ЧПУ:
  • Если URL не соответствует статическим шаблонам, срабатывает последнее правило
  • $1 содержит алиас из URL Флаг QSA (Query String Append) позволяет добавлять дополнительные параметры
  1. В PHP можно получить:

    // Для статических URL
    $view = $_GET['view'];
    $id = $_GET['id'];
        
    // Для ЧПУ
    $alias = $_GET['alias'];

→ Ссылка