如何重定向对子域的直接访问并仅允许通过特定网址
例如,我有 mydomain 和 sub.mydomain 我想将对 sub.mydomain 的直接访问重定向到 mydomain,并且是否应该允许某人通过 sub.mydomain/url 访问! 我希望你们明白我想说的。 谢谢 我试过了
//code
$_SESSION['fromMain'] = "true";
header("Location: noaccess.php");
if($_SESSION['fromMain'] == "false"){
//send them back
header("Location: foo.php");
}
else{
//reset the variable
$_SESSION['fromMain'] = "false";
}
我也尝试过这个
RewriteEngine On
# Allow access only from a specific directory on the specific URL
SetEnvIf Referer "http://specificurl\.com/specificdirectory" ref_allowed
Order Deny,Allow
Deny from all
Allow from env=ref_allowed
# Redirect to main domain for non-specific URLs
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://maindomain\.com/ [NC]
RewriteRule ^ http://maindomain.com [L,R=301]
我希望我的子域只能通过特定的 url 示例进行访问:sub.domain.com/folder/,如果有人尝试在没有我提到的特定 url 的情况下直接访问我的子域,他应该重定向到主 domain.com。因此只有拥有我的子域的唯一 url 的人才能进入。
听起来您只需要在子域指向的目录中的根
.htaccess
文件顶部使用mod_rewrite执行类似以下操作:
RewriteEngine On
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{HTTP_HOST} ^sub\.example\.com
RewriteRule !^url$ https://example.com/ [R=302,L]
其中
url
是可以通过子域访问的具体URL。所有其他 URL 均被重定向。如果这是一个物理目录(您给出 /folder/
作为辅助示例),则不需要第一个 条件(检查 REDIRECT_STATUS
环境变量)。
仅当您有重写请求的前端控制器模式(例如 WordPress、Joomla、Laravel 等)时,才需要检查 REDIRECT_STATUS
环境变量的第一个
条件
但请注意,任何可能引用子域的资产(图像、CSS、JS 等)也将被阻止/重定向。
您发布的 PHP 代码实际上没有意义。正如所写,它无条件地将所有内容重定向到
noaccess.php
? (但是$_SESSION['fromMain']
是什么。
您发布的
.htaccess
代码是两种不同的阻止引用链接的方法,这似乎不是您所要求的?
这对我来说确实有用:
# Redirect index access to main domain
RewriteEngine On
RewriteBase /
# Redirect sub.example.org to example.org
RewriteCond %{REQUEST_URI} ^/$
RewriteRule ^$ http://example.org/ [L,R=301]
# Allow access to /me/ folder
RewriteCond %{REQUEST_URI} !^/me/
RewriteRule ^(.*)$ http://example.org/ [L,R=301]