【发布时间】:2020-05-07 22:43:46
【问题描述】:
如果你有这样的结构:
public_html/folder/example.com/index.php
public_html/folder/example.com/subdomain1/index.php
public_html/folder/example.com/subdomain2/index.php
public_html/folder/example.com/subdomain3/index.php
并且您希望每个“子域”文件夹在 http://subdomain1.example.com 上可见,而不是在 http://example.com/subdomain1/...
您能否通过结合使用通配符子域 DNS 设置和仅一个 .htaccess 文件来实现此目的?
例如,我通过cPanel 添加了通配符子域,并且在我的 .htaccess 文件(example.com 文件夹的根目录)中:
<IfModule mod_rewrite.c>
RewriteCond %{HTTP_HOST} ^([^.]+).example.com$ [NC]
RewriteCond %{REQUEST_URI} !%1
RewriteRule ^(.*)$ /%1/$1 [L]
</IfModule>
但每次我尝试访问子域 URL 中的其中一个子文件夹时,都会收到 500 错误。
我有什么遗漏吗?我使用了一个 .htaccess 测试工具来确保规则是正确的。我知道 mod_rewrite 已启用,并且 Apache 设置正确。比如这个 index.php 有问题吗?
我仍然可以访问http://example.com/subdomain1/ 并查看该站点。它不会像我想象的那样重定向到子域。
任何正确方向的帮助将不胜感激。在这一点上,我已经搜索和测试了几个小时的不同规则。我确实联系了我的房东并确认我拥有所有适当的权限和设置。
如果我错过了 - 这里的想法是,无论何时添加子文件夹(除非有特定例外),它都应该可以作为子域地址自动访问 - 在 cPanel / DNS 中无需手动添加子域。
///编辑///
下面是 public_html/ 根目录中的 .htaccess 文件。 public_html/folder/ 目录中没有 .htaccess。
# ----------------------------------------------------------------------
# CORS-enabled images (@crossorigin)
# ----------------------------------------------------------------------
# Send CORS headers if browsers request them; enabled by default for images.
# developer.mozilla.org/en/CORS_Enabled_Image
# blog.chromium.org/2011/07/using-cross-domain-images-in-webgl-and.html
# hacks.mozilla.org/2011/11/using-cors-to-load-webgl-textures-from-cross-domain-images/
# wiki.mozilla.org/Security/Reviews/crossoriginAttribute
<IfModule mod_setenvif.c>
<IfModule mod_headers.c>
# mod_headers, y u no match by Content-Type?!
<FilesMatch "\.(gif|png|jpe?g|svg|svgz|ico|webp)$">
SetEnvIf Origin ":" IS_CORS
Header set Access-Control-Allow-Origin "*" env=IS_CORS
</FilesMatch>
</IfModule>
</IfModule>
# ----------------------------------------------------------------------
# Webfont access
# ----------------------------------------------------------------------
# Allow access from all domains for webfonts.
# Alternatively you could only whitelist your
# subdomains like "subdomain.example.com".
<IfModule mod_headers.c>
<FilesMatch "\.(ttf|ttc|otf|eot|woff|woff2|font.css|css|js)$">
Header set Access-Control-Allow-Origin "*"
</FilesMatch>
</IfModule>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
AddType audio/ogg ogg ogv
AddType video/ogg ogg ogv
【问题讨论】:
-
" 在我的 .htaccess 文件中(example.com 文件夹的根目录)" - 所以定义的 文档根目录 是
public_html/example.com? (不是public_html?) -
我相信我会关注,是的,这不是托管帐户的主域。这是一个插件域。在这种情况下,example.com 将是插件域。
-
您还有其他
.htaccess文件吗?例如。位于public_html/.htaccess(用于主域)或文件系统的其他子目录中? -
我很抱歉。那应该包括在内。是的,我包含了 .htaccess 文件 (public_html/.htaccess)。中间文件夹中没有 .htaccess(因为我必须允许 FTP 访问一组特定的站点,所以 public_html/folder/ 中没有 .htaccess)。然后唯一的其他 .htaccess 在 public_htlm/folder/example.com/.htaccess
标签: apache .htaccess mod-rewrite dns wildcard-subdomain