.htaccess 如何使用htaccess编写子域?

.htaccess 如何使用htaccess编写子域?,.htaccess,redirect,subdomain,wildcard-subdomain,.htaccess,Redirect,Subdomain,Wildcard Subdomain,我正试图通过htaccess文档转发一个子域。以下说明将转发http://sub.domain.com到内部结构Root>子文件夹>index.php。这一切都很好 # REWRITE DEFAULTS # ==================================================================================================== RewriteEngine On RewriteBase / # SUBDOMAIN F

我正试图通过htaccess文档转发一个子域。以下说明将转发
http://sub.domain.com
到内部结构
Root>子文件夹>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/
然后一切又恢复正常,但是如果不以斜杠结尾
http://sub.domain.com/images
地址栏中的url将变为
http://sub.domain.com/subfolder/images/
这显然不是我想要的

如果我忘记了一条斜线,我会加上一条斜线怎么办

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


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

这是因为
/subfolder/images
是一个真实目录,
mod\u 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]