。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文件-通配符子域重定向的主要内容,如果未能解决你的问题,请参考以下文章