如何使用 htaccess 编写子域?
How to write a subdomain with htaccess?
我正在尝试通过 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/
这种方法只有一个(大)失败。当您尝试通过转到 http://sub.domain.com/images/
到达子文件夹中的文件夹时,例如 Root > subfolder > 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// [L,R=301]
当你有一个正常的 URL (http://www.domain.com/images
) 时,这一切都有效,因为它会检测到它是一个目录并添加一个斜线,如果它是一个文件,它将省略斜线。但是,这不适用于我们的 http://sub.domain.com/images
示例。
有没有人知道如何使用 htaccess 使子域正常工作?
发生这种情况是因为 /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// -d
RewriteRule ^(.*?[^/])$ %{REQUEST_URI}/ [L,NE,R=302]
RewriteCond %{HTTP_HOST} ^sub\.domain\.com$ [NC]
RewriteCond %{REQUEST_URI} !^/subfolder/
RewriteRule ^(.*)$ /subfolder/ [L]
我正在尝试通过 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/
这种方法只有一个(大)失败。当您尝试通过转到 http://sub.domain.com/images/
到达子文件夹中的文件夹时,例如 Root > subfolder > 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// [L,R=301]
当你有一个正常的 URL (http://www.domain.com/images
) 时,这一切都有效,因为它会检测到它是一个目录并添加一个斜线,如果它是一个文件,它将省略斜线。但是,这不适用于我们的 http://sub.domain.com/images
示例。
有没有人知道如何使用 htaccess 使子域正常工作?
发生这种情况是因为 /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// -d
RewriteRule ^(.*?[^/])$ %{REQUEST_URI}/ [L,NE,R=302]
RewriteCond %{HTTP_HOST} ^sub\.domain\.com$ [NC]
RewriteCond %{REQUEST_URI} !^/subfolder/
RewriteRule ^(.*)$ /subfolder/ [L]