Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache htaccess将所有子域重定向到同一目录_Apache_.htaccess - Fatal编程技术网

Apache htaccess将所有子域重定向到同一目录

Apache htaccess将所有子域重定向到同一目录,apache,.htaccess,Apache,.htaccess,我希望能够将所有子域重定向到文件夹: RewriteCond %{HTTP_HOST} ^([^/.]+)\.example\.com$ RewriteRule (.+)$ "http://example.com/subdomains/%1" [L,P] 例如,如果一些访问sub1.example.com它将保留URL,但显示example.com/subdomains/sub1,如果sub1目录不存在,它将显示example.com/404 这可能吗 我尝试了上述代码,但它显示: Forb

我希望能够将所有子域重定向到文件夹:

RewriteCond %{HTTP_HOST} ^([^/.]+)\.example\.com$ 
RewriteRule (.+)$ "http://example.com/subdomains/%1" [L,P]
例如,如果一些访问
sub1.example.com
它将保留URL,但显示
example.com/subdomains/sub1
,如果sub1目录不存在,它将显示
example.com/404

这可能吗

我尝试了上述代码,但它显示:

Forbidden
You don't have permission to access /index.php on this server.
Wordpress说:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

我想说你遇到了权限问题。我猜您的Apache服务器是以
Apache
用户的身份运行的。使用
chmod
授予对该路径的
apache
访问权限

您的上述.htaccess将从外部重定向调用,因为您使用完整的URL作为目标

在你的问题中,你说你想保留主机名,所以我假设这就是要求

0)启用重写引擎 1) 正在将已知子域重写到其在/subdomains中的目录
  • 当我们遇到子域请求时
  • 我们还没有将其重写到/子域
  • 我们还没有将其改写为/404
  • 然后将其重写为/subdomains/{subdomain}/
  • 那么,如果请求是

    http://foo.example.com/hello
    
    http://bar.example.com/hello
    
    浏览器中的URL将保持不变,但会在内部映射到

    /subdomains/foo/
    
    /subdomains/bar/
    
    2) 将未知子域重写到/404
  • 当我们遇到子域请求时
  • 我们已经将其重写为/子域
  • 我们还没有将其改写为/404
  • 并且它不作为文件存在
  • 并且它不作为目录存在
  • 并且它不作为符号链接存在
  • 然后将其重写为/404
  • 那么,如果请求是

    http://foo.example.com/hello
    
    http://bar.example.com/hello
    
    浏览器中的URL将保持不变,但会在内部映射到

    /subdomains/foo/
    
    /subdomains/bar/
    
    通过第一个
    重写规则
    from 1)

    如果
    /subdomains/bar/
    不存在,则第二条
    重写规则将从2)开始并在内部将其映射到

    /404/
    
    3) 测试环境
    实际上,我用示例代码测试了所有这些,这里提供了:

    如果直接转到
    http://example.com/subdomains/sub1/
    ?您是否也有
    禁止的
    错误,或者您有权访问它?不管怎样,你的代码应该可以工作,尽管它写得不好。我认为它确实起作用了。当您禁用此
    ,是否将
    sub1.example.com
    视为url?不,没有错误代码也可以。禁止的问题可能由其他.htaccess设置引起,例如在IndexIgnore上。检查你被引导到哪里。我也安装了Wordpress-我是把这两部分代码放在Wordpress代码的上面还是下面?你是把Wordpress用于这些子域还是只用于主域?如果只是主域名,我会试着把它放在上面。它只是主域名——wordpress只在主域名上运行。我试着把它放在上面,它工作了,但是阻止了主域(wordpress)的工作,如果我把它放在下面,wordpress工作了,但是没有一个子域。你用www.RewriteCond%{HTTP_HOST}调用你的主域^www\.example\.com$