不要重定向一个目录

不要重定向一个目录

我需要有关自定义重定向的帮助.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

答案1

将此条件添加到您的规则中: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]

答案2

如果你只是想防止“一个目录”被重写,那么在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。)

相关内容