。htaccess文件-通配符子域重定向

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了。htaccess文件-通配符子域重定向相关的知识,希望对你有一定的参考价值。

我有很多使用通配符配置的子域,例如

subdomain1.domain.com
subdomain2.domain.com
subdomain3.domain.com
(...)
subdomain89.domain.com

等等

它们指向/ public_html /。在我创建的public_html里面

/public_html/subdomain1
/public_html/subdomain2
/public_html/subdomain3
(..)
/public_html/subdomain89

子文件夹。

我想将所有请求从子域(任意)重定向到相应子文件夹内的index.php文件,例如:

http://subdomain1.domain.com/
http://subdomain1.domain.com/about_us.php
http://subdomain1.domain.com/contact.php

重定向到/public_html/subdomain1/index.php。

http://subdomain2.domain.com/
http://subdomain2.domain.com/about_us.php
http://subdomain2.domain.com/contact.php

重定向到/public_html/subdomain2/index.php等,等等

这是我的.htaccess:

RewriteEngine On
RewriteCond %HTTP_HOST ^(www\.)?([a-z0-9-]+)\.domain\.com$ [NC]
RewriteRule !^([a-z0-9-]+)($|/) /%2%REQUEST_URI/index.php [PT,L]

[当我访问subdomain1.domain.com时,我从/ public_html / subdomain1中看到了index.php文件,但是当我访问subdomain1.domain.com/about_us.php时,我得到了404。有什么想法吗?

谢谢

答案

我已经知道了。这是工作代码:

RewriteEngine On
RewriteCond %HTTP_HOST ^(www\.)?([a-z0-9-]+)\.domain\.com$ [NC]
RewriteRule !^([a-z0-9-]+)($|/) /%2%REQUEST_URI/ [L]
RewriteCond %REQUEST_FILENAME !-d
RewriteCond %REQUEST_FILENAME !-f
RewriteRule . index.php [L]

:-)

另一答案

首先请确保您的.htaccess文件位于文档根目录(与index.php相同的位置),否则只会影响其所在的子文件夹(以及其中的所有子文件夹-递归)。

接下来,对您的规则进行一些更改,使其看起来像:

RewriteEngine on
RewriteCond %REQUEST_FILENAME !-f
RewriteCond %REQUEST_FILENAME !-d
RewriteRule ^(.*)$ /index.php?path=$1 [NC,L,QSA]

目前,您只匹配。这是任何字符的一个实例,您至少需要。*以匹配任意数量的任何字符的实例。

$ _ GET ['path']变量将包含伪造的目录结构,例如,/ mvc / module / test,您可以在index.php中使用它来确定控制器和要执行的动作。

如果您希望将整个shebang安装在子目录中,例如/ mvc /或/ framework /,则最简单的方法是略微更改重写规则以将其考虑在内。

RewriteRule ^(.*)$ /mvc/index.php?path=$1 [NC,L,QSA]

并且确保您的index.php位于该文件夹中,而.htaccess文件位于文档根目录中。

$ _ GET ['path']的替代方案(18年2月和19年1月更新)

实际上没有必要(即使现在也不常见)将路径设置为$ _GET变量,许多框架将依靠$ _SERVER ['REQUEST_URI']来检索相同的信息-通常确定要使用的控制器-但原理是完全一样的。

这确实简化了RewriteRule,因为您不需要创建path参数(这意味着OP的原始RewriteRule现在可以使用:]

RewriteEngine on
RewriteCond %REQUEST_FILENAME !-f
RewriteCond %REQUEST_FILENAME !-d
RewriteRule ^.*$ /index.php [L,QSA]

但是,关于在子​​目录中安装的规则仍然适用,例如

RewriteRule ^.*$ /mvc/index.php [L,QSA]

以上是关于。htaccess文件-通配符子域重定向的主要内容,如果未能解决你的问题,请参考以下文章

.htaccess 如何仅将子域/文件夹重定向到子域

.htaccess 重定向到子域

.htaccess 重定向影响子域

.htaccess - 将子域重定向到文件夹

.htaccess:将主域重定向到https:// www,子域重定向到https://(不带www)

.htaccess 重定向 - 自动添加 www。如果不存在子域