如何重定向对子域的直接访问并仅允许通过特定网址

问题描述 投票:0回答:2

如何重定向对子域的直接访问并仅允许通过特定网址

例如,我有 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]

.htaccess redirect dns webserver subdomain
2个回答
0
投票

我希望我的子域只能通过特定的 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
代码是两种不同的阻止引用链接的方法,这似乎不是您所要求的?


0
投票

这对我来说确实有用:


# 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]


© www.soinside.com 2019 - 2024. All rights reserved.