当我使用特定的子域链接格式时,我试图让我的子域的访问者只能直接进入。我知道这也会阻止SE,但我不希望子域被索引。
允许的链接应如下所示:
subdomain.maindomain.com/aaa/bbb/ccc
并且应该改写为:
subdomain.maindomain.com/index.php?a=aaa&b=bbb&c=ccc
如果不是这种形式并且来自空的或外部推荐人,则应该转到主域并且没有变量:
maindomain.com /
我尝试了所有类型的配置,我在subdomain文件夹中的最后一个.htaccess文件如下所示:
RewriteEngine on
RewriteRule ^/?(\w{3})/(\w{3})/(\w{3})$ index.php?a=$1&b=$2&c=$3 [S=1,L]
RewriteCond %{HTTP_REFERER} !^http://(www\.)?maindomain\.com [NC]
RewriteRule ^(.*)$ http://domain\.com/ [L]
但它仍然没有按照我的意愿行事,它还将允许表单的子域请求重定向到主域,并且它还将vars作为请求添加到主域,转到此页面
maindomain.com/?a=aaa&b=bbb&c=cee
你能帮助我解决上面定义的条件。
关于性能的第二个问题:我显然可以使用PHP进行此验证/重定向,您认为什么会更有效?
谢谢!
答案 0 :(得分:1)
如果我理解你的逻辑,请试试这个:
RewriteEngine on
RewriteBase /
# Don't do any more rewrites if on index.php
# Note that you can add the HTTP_HOST condition here if you only want it to be active for the subdomain
RewriteRule ^index\.php$ - [L]
# If on subdomain then check that the referer is from main domain and attempt to match a regex
# If we find a match then ignore the next rule that rewrites subdomain to domain.com
# Basically this is like an awkward if-else statement..
# ================
RewriteCond %{HTTP_HOST} ^subdomain\.domain\.com$
RewriteCond %{HTTP_REFERER} ^http://(www\.)?domain\.com [NC]
# Rewrites /aaa/bbb/ccc to /index.php?a=aaa&b=bbb&c=ccc
RewriteRule ^(\w{3})/(\w{3})/(\w{3})$ index.php?a=$1&b=$2&c=$3 [S=1,L]
# Redirect all requests from subdomain to domain.com by default
# ================
RewriteCond %{HTTP_HOST} ^subdomain\.domain\.com$
# Add the trailing question mark to delete all query parameters
RewriteRule .* http://domain.com/? [L]
答案 1 :(得分:0)
你非常接近。您只需要几个额外的部分
S=1
不会造成伤害,但也没有必要。index.php
被重定向到主域。?
以防止参数转发到主域。R
标记。所有部分在一起
RewriteEngine on
RewriteCond %{HTTP_REFERER} ^http://(.+\.)?maindomain\.com [NC]
RewriteRule ^(\w{3})/(\w{3})/(\w{3})$ index.php?a=$1&b=$2&c=$3 [L]
RewriteCond %{REQUEST_URI} !$index\.php$
RewriteRule ^ http://domain\.com/? [R,L]
关于性能,如果你只用.htaccess重写或重定向,那么这个工作甚至在它遇到一些PHP脚本之前就完成了。所以,我认为最好用.htaccess来做这件事。