Мне нужна помощь с моим заказом .htaccess
перенаправление.
Вот мои .htaccess
правила:
# AddHandler application/x-httpd-php .php .htm
RewriteEngine on
# 301 redirect to domain without 'www.'
RewriteCond %{HTTP_HOST} ^example.com$ [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [L]
RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC,OR]
RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC]
RewriteCond %{REQUEST_FILENAME} !/www\.example\.com/public/www/
RewriteRule ^(.*)$ /public/www/$1 [L]
RewriteCond %{HTTP_HOST} ^(www\.)?cms\.example\.com$ [NC]
RewriteCond %{REQUEST_FILENAME} !/cms\.example\.com/public/core/
RewriteCond %{REQUEST_FILENAME} !/cms\.example\.com/tmp/
RewriteRule ^(.*)$ /public/core/$1 [L]
Итак, все из основного каталога перенаправляется в public/...
. Можно ли не перенаправлять один каталог в основной каталог?
Например:
http://example.com/something
перенаправит меня на public/www/something
но я хочу указать на root_folder/something
.
Добавьте это условие в свое правило: RewriteCond %{REQUEST_URI} !^/something
.
Тогда ваше правило должно выглядеть, например, так:
RewriteCond %{HTTP_HOST} ^www\.mydomain\.com$ [NC,OR]
RewriteCond %{HTTP_HOST} ^www\.mydomain\.com$ [NC]
RewriteCond %{REQUEST_URI} !^/something
RewriteCond %{REQUEST_FILENAME} !/www\.mydomain\.com/public/www/
RewriteRule ^(.*)$ /public/www/$1 [L]
Если вы просто хотите предотвратить перезапись «одного каталога», было бы более эффективно выполнить эту проверку в RewriteRule
шаблон, а не добавлять другое условие. Например:
RewriteRule !^something /public/www%{REQUEST_URI} [L]
Однако было бы лучше изменить порядок ваших правил, чтобы вы выполняли свои /public/www/
проверить в RewriteRule
шаблон вместо этого, поскольку это наиболее распространенный. Например:
RewriteCond %{HTTP_HOST} ^www\.example\.com
RewriteCond %{REQUEST_URI} !/something
RewriteRule !^/public/www/ /public/www/$1 [L]
(Возможно, это была проблема с вашим примером кода, но вы без необходимости продублировали HTTP_HOST
чек.)