mod_rewrite: перезапись и перенаправление URL

#.htaccess #mod-rewrite #url-rewriting

#.htaccess #мод-перезапись #переписывание URL

Вопрос:

У меня есть следующий URL:

 http://example.com/pages/cms/impressum.php
  

и хотите получить URL-адрес, подобный этому:

 http://example.com/impressum
  

Мое правило перезаписи таково:

 RewriteEngine on 
RewriteBase /
RewriteRule ^impressum$ /pages/cms/impressum.php [R,L]
  

Проблема в том, что я могу открыть URL-адрес двумя способами. Я хотел бы перенаправление из /pages/cms/impressum.php в /impressum. Если я использую [R = 301], второй URL, который мне не нужен, работает. Я хочу отменить это правило.

Ответ №1:

Использовать:

 RewriteEngine On
RewriteBase /

# To externally redirect pages/cms/impressum.php to impressum
RewriteCond %{THE_REQUEST} s/ pages/cms/impressum.php[s?] [NC]
RewriteRule ^ /impressum [R=301,L]

# To internally forward impressum to pages/cms/impressum.php
RewriteRule ^impressum/?$ pages/cms/impressum.php [L,NC]