如何用htaccess写一个子域名?

时间:2016-04-24 09:46:49

标签: .htaccess redirect subdomain wildcard-subdomain

我正在尝试通过htaccess文档转发子域名。以下说明会将http://sub.domain.com转发给内部结构Root > subfolder > index.php。这一切都运作良好。

# REWRITE DEFAULTS
# ====================================================================================================
RewriteEngine On
RewriteBase /

# SUBDOMAIN FORWARD
# ====================================================================================================
RewriteCond %{HTTP_HOST} ^sub.domain.com$ 
RewriteRule ^(/)?$ subfolder/index.php [L]

RewriteCond %{HTTP_HOST} ^sub.domain.com$ 
RewriteCond %{REQUEST_URI} !^/subfolder/
RewriteRule ^(.*)$ /subfolder/$1 

这种方法只有一次(大)垮台。当您尝试通过转到Root > subfolder > images来访问子文件夹(例如http://sub.domain.com/images/)中的文件夹时,一切正常,然而当您没有以斜杠结束时{ {1}}地址栏中的网址将变为http://sub.domain.com/images,这显然不是我想要的。

那么,如果忘记删除斜杠,我会添加斜杠怎么办?

http://sub.domain.com/subfolder/images/

当你有一个普通的URL(RewriteCond %{HTTP_HOST} ^(.*).domain.com$ RewriteCond %{REQUEST_URI} !(.*)/$ RewriteCond %{REQUEST_FILENAME} !(.*)/$ RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ http://%1.domain.com/$1/ [L,R=301] )时,这一切都有效,因为它会检测到它是一个目录并添加一个斜杠,如果它是一个文件,它将省略斜杠。但是,这不适用于我们的http://www.domain.com/images示例。

是否有人知道如何使用htaccess使子域名正常工作?

1 个答案:

答案 0 :(得分:1)

这种情况正在发生,因为/subfolder/images是一个真实的目录,mod_dir模块通过执行301重定向为所有目录添加一个尾部斜杠。

你可以像这样使用它:

RewriteEngine On

# add a trailing slash if /subfolder/images is a directory
RewriteCond %{HTTP_HOST} ^sub\.domain\.com$ [NC]
RewriteCond %{DOCUMENT_ROOT}/subfolder/$1/ -d
RewriteRule ^(.*?[^/])$ %{REQUEST_URI}/ [L,NE,R=302]

RewriteCond %{HTTP_HOST} ^sub\.domain\.com$ [NC]
RewriteCond %{REQUEST_URI} !^/subfolder/
RewriteRule ^(.*)$ /subfolder/$1 [L]