Назад | Перейти на главную страницу

Перезапись URL-адреса Apache mod_rewrite

Я хочу переписать URL-адрес с помощью mod_rewrite из http://www.server.com/directory/public к http://www.server.com/directory (где каталог будет направлен в каталог / общедоступный)

Я пробовал несколько вещей, но не могу понять. Вот моя конфигурация:

    <VirtualHost xxx.xxx.xxx.xxx:443>
            ServerAdmin webmaster@server.com
            ServerName www.server.com
            DocumentRoot /var/www/server.com

        <Directory /var/www/server.com>
            RewriteEngine on
            RewriteCond %{REQUEST_URI} ^/directory
            RewriteRule ^(.*)$ /directory/public/ [L]
        </Directory>
    </VirtualHost>

Попробуйте изменить свое правило перезаписи на это:

RewriteRule ^/directory(.*) /directory/public$1 [NC,L]

Вам не нужен RewriteCond

В пределах <Directory > контекст, URI в правилах перезаписи не начинаются с /.

Это также верно для URI в правилах перезаписи в .htaccess файлы, потому что они неявно находятся в каталоге.

Соответствующая часть документации называется "Перезапись для каталога"

Чтобы исправить это, вы можете сделать одно из следующих действий:

  1. Переместите RewriteRule и RewriteCond из <Directory > блок.
  2. Удалите начальную косую черту из RewriteCond и второй части RewriteRule.
  3. Следуйте предложению Ivmisooners, но также переместите RewriteRule из <Directory > блок.
  4. Следуйте предложению Ivmisooners, но удалите ведущие косые черты из RewriteRule.

Если бы это был мой выбор, я бы использовал вариант 3.


Из моего чтения страницы документации, указанной выше, кажется, что у вас должен быть Options FollowSymLinks включен для RewriteRules для работы в контексте каталога. Сам никогда не тестировал. Если у вас вообще не получается заставить RewriteRules работать внутри этого <Directory > блок, попробуйте добавить Options +FollowSymLinks.