gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 05:47:23 25 4
gpt4 key购买 nike

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

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

在我的 htaccess 文件的顶部,是:
RewriteEngine On
DirectoryIndex index.php

RewriteCond %{HTTP_HOST} admin.domain.com$
RewriteRule ^(.*)$ /admin/system/$1 [L]

最佳答案

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

在您的问题中,您说您想保留主机名,所以我认为这是要求。

0) 启用重写引擎

RewriteEngine On

1) 将已知子域重写到它们在/subdomains 中的目录
# Rewrite known subdomains to /subdomains/{subdomain}/
RewriteCond %{HTTP_HOST} ^([^/.]+)\.example\.com$
RewriteCond %{REQUEST_URI} !^/subdomains [NC]
RewriteCond %{REQUEST_URI} !^/404 [NC]
RewriteRule ^(.+)$ /subdomains/%1/ [L]
  • 当我们遇到带有子域的请求时,
  • 我们还没有将其重写为/subdomains
  • 我们还没有将其重写为/404
  • 然后将其重写为/subdomains/{subdomain}/

  • 所以,如果请求是
    http://foo.example.com/hello

    浏览器中的 URL 将保持不变,但在内部映射到
    /subdomains/foo/

    2)将未知子域重写为/404
    # Rewrite missing unknown subdomains to /404/
    RewriteCond %{HTTP_HOST} ^([^/.]+)\.example\.com$
    RewriteCond %{REQUEST_URI} ^/subdomains [NC]
    RewriteCond %{REQUEST_URI} !^/404 [NC]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-l
    RewriteRule ^(.+)$ /404/ [L]
  • 当我们遇到带有子域的请求时,
  • 我们已经将其重写为/subdomains
  • 我们还没有将其重写为/404
  • 并且它不作为文件存在
  • 并且它不作为目录存在
  • 并且它不作为符号链接(symbolic link)存在
  • 然后将其重写为/404

  • 所以,如果请求是
    http://bar.example.com/hello

    浏览器中的 URL 将保持不变,但在内部映射到
    /subdomains/bar/

    由第一个 RewriteRule从 1)。

    如果 /subdomains/bar/不存在,第二个 RewriteRule从 2) 将启动并在内部将其映射到
    /404/

    3) 测试环境

    我实际上用示例代码测试了所有这些,可在此处获得: https://github.com/janpapenbrock/stackoverflow-36497197

    关于apache - htaccess 将所有子域重定向到同一目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36497197/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com