我有很多使用通配符配置的子域名,例如。
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
子文件夹。
我想将子域(any)中的所有请求重定向到相应子文件夹中的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.有什么想法吗?
由于
答案 0 :(得分:0)
我已经弄清楚了。这是工作代码:
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]
: - )
答案 1 :(得分:0)
首先,请确保您的.htaccess文件位于文档根目录(与index.php相同的位置)中,否则只会影响其所在的子文件夹(以及其中的所有子文件夹-递归)。 / p>
接下来,对您的规则进行一些更改,使其看起来像:
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中使用它来确定控制器和要执行的动作。 / p>
如果要将整个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']来检索相同的信息-通常确定要使用的Controller-但原理是完全一样的。
这确实稍微简化了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]