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