У меня такая структура папок:
/var/www/mysite/abc/
/var/www/mysite/def/
/var/www/mysite/fgh/
/var/www/mysite/ijk/
/var/www/mysite/portal/
/var/www/mysite/wyz/
Сегодняшний мой сервер перенаправляет все запросы www.mydomain.com
к www.mydomain.com/portal
и это нормально ...
Но я хочу изменить это поведение и оставить www.mydomain.com
доступ к /var/www/mysite/portal/
папка на фоне, пока www.mydomain.com/abc/
все еще доступ к /var/www/mysite/abc/
папка как раньше.
Это то, что я безуспешно пробовал на моем htaccess:
IndexIgnore *
Options +FollowSymlinks
<IfModule mod_rewrite.c>
RewriteEngine On
#This doesn't work!!!
#RewriteCond %{REQUEST_URI} !^abc
#Neither this :\
#RewriteCond %{REQUEST_URI} !^/abc
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^$ /portal/index.php [L]
RewriteRule . /portal/index.php [L]
</IfModule>
Все запросы продолжаются www.mydomain.com/portal/
когда я использую этот .htaccess (с комментариями или без них)
Попробуйте добавить это в свою http-конфигурацию (где-то в конфигурации она не работает на уровне htaccess или virtualhost)
RewriteLog /tmp/rewrite.log
RewriteLogLevel 9
Это предоставит вам построчное объяснение того, что он пытается сопоставить с каким регулярным выражением, и каково окончательное решение.
Удалите эти строки после этого, иначе однажды вы обнаружите, что у вас не так много места на диске, как вы думали ...
Вы можете попробовать использовать условия REQUEST_FILENAME наоборот - например, сказать «если REQUEST_FILENAME существует (и является файлом / каталогом / символической ссылкой), не переписывайте его» - что-то вроде
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -l
RewriteRule ^.*$ - [L]
Это правило перезаписи означает «позволить запросу пройти нетронутым», а флаг [L] должен останавливать обработку перезаписи, не затрагивая перезаписи портала ниже.
Помимо этого, я бы предложил использовать RewriteLog и RewriteLogLevel (по крайней мере, уровень 3), чтобы получить дополнительную информацию о том, почему условия не совпадают правильно.
я хотел бы использовать
Alias /abc /var/www/mysite/abc
хотя это не входит в файл .htaccess, его необходимо поместить в VirtualHost
блок конфигурации.
Если у вас нет доступа к конфигурации виртуального хоста, попробуйте
RewriteRule ^/abc(.*) /var/www/mysite/abc$1
но убедитесь, что это идет перед ваши существующие правила.
РЕДАКТИРОВАТЬ: в ответ на ваш комментарий, возможно, самым простым решением было бы сделать это:
DocumentRoot /var/www/mysite/
Alias / /var/www/mysite/portal/
Но если это неприемлемо, вы можете использовать AliasMatch
:
AliasMatch ^/(abc|def|fgh|...)(.*)$ /var/www/mysite/$1$2
где конечно ...
следует заменить на остальные имена ваших папок. Но, тем не менее, для этого нужно напечатать их все один раз. Может быть способ автоматизировать это, используя RewriteRule
s и, возможно, подзапросы, но у меня нет времени, чтобы выяснить, что это будет, и проверить это.