Я хочу переписать 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
файлы, потому что они неявно находятся в каталоге.
Соответствующая часть документации называется "Перезапись для каталога"
Чтобы исправить это, вы можете сделать одно из следующих действий:
<Directory >
блок.<Directory >
блок.Если бы это был мой выбор, я бы использовал вариант 3.
Из моего чтения страницы документации, указанной выше, кажется, что у вас должен быть Options FollowSymLinks
включен для RewriteRules для работы в контексте каталога. Сам никогда не тестировал. Если у вас вообще не получается заставить RewriteRules работать внутри этого <Directory >
блок, попробуйте добавить Options +FollowSymLinks
.