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

Не перенаправляйте один каталог

Мне нужна помощь с моим заказом .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 чек.)