.htaccess子域名重定向无法正常工作
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了.htaccess子域名重定向无法正常工作相关的知识,希望对你有一定的参考价值。
好的,现在我迷路了。
我正在尝试将子域的简单.htaccess重定向到服务器上的特定文件夹,这意味着所有
subdomain.mywebsite.com
将会去
www.mywebsite.com/s_subdomain
但由于某些原因,这不起作用。
我在.htaccess中尝试了很多设置,但没有好处。现在我的.htaccess我有:
RewriteEngine on
Options +FollowSymLinks
Options +SymlinksIfOwnerMatch
RewriteCond %{HTTP_HOST} !^(www|ftp|mail).mywebsite.com
RewriteCond %{HTTP_HOST} ^([^.]+).mywebsite.com
RewriteRule (.*) /s_%1/$1 [L]
有没有其他设置,或者是我错过了什么?
PS。 - 我无法访问http.conf。我必须只使用.htaccess
谢谢!
这只是一个“普通”重写(浏览器不会看到它)。要重定向,请将R标志添加到RewriteRule。
RewriteRule (.*) /s_%1/$1 [L,R]
其余的似乎是正确的,虽然我还没有测试过。有关调试,您可以考虑使用RewriteLog,请参阅http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html#rewritelog
那么,这两种方案都不起作用吗尝试简单的事情吧。
RewriteEngine on
RewriteCond ${SERVER_NAME} ^(subdomain).yoursite.com$ [nc]
RewriteRule ^(.*)$ http://www.yoursite.com/s_%1/$1 [L,R]
要测试您的子域是否正确处理,请创建random.html文件,将其放在应该从中读取的位置,然后尝试通过http://subdomain.yoursite.com/random.html
打开它。然后你可以尝试一些像:
RewriteRule ^random.html - [F]
...如果阻止访问文件,请尝试预先添加
RewriteCond ${SERVER_NAME} ^subdomain.yoursite.com$ [nc]
到以前的规则,阻止访问该文件,以确保重写引擎实际上符合您的规则。这将仅针对所需的子域(www.yoursite.com/random.html应该可以工作,但不应通过子域访问)。
然后,如果这些规则有效,那只需要添加更多内容并查看它何时停止工作。
RewriteRules是一个婊子。
以下应该有效:
的.htaccess:
RewriteCond ${SERVER_NAME} !^(www|ftp|mail).example.com$
RewriteCond ${SERVER_NAME} !^([^.]+).example.com$
RewriteRule .* redirect.php?to=%1
redirect.php
<?php
$desired_server_name = 'http://example.com';
$subdir = 's_' . $_GET['to'];
$url = $desired_server_name . '/' . $to . $_SERVER['REQUEST_URI'];
// Permanent redirects
header('HTTP/1.1 301 Moved Permanently');
// Or simple redirects:
header('HTTP/1.1 302 Found');
header('Location: '.$url);
?>
在我的服务器上工作(debian 4 / apache 2)。
额外奖励:不要使用HTTP_HOST!请参阅以下请求:
HTTP/1.1 GET /foo/bar.php
Host: www.host.tld"><script>alert(/Hello/)</script
Connection: close
如果在.php脚本中使用$_SERVER['HTTP_HOST']
来构建链接或.htaccess规则,并且“www.host.tld”是为Apache配置的虚拟主机或唯一主机,则HTTP请求标头中的XSS将被传递没有转义。
我们在我们的虚拟机上有类似的事情,我们将anything.usertld重定向到该域的文件夹,在httpd.conf中,在.htaccess中尝试过,像你的一样,它不起作用。
调整它,这适用于我(我的VM占用了一个名为benb的tld,但将其更改为您的域应该没问题):
RewriteCond %{HTTP_HOST} !^www.benb
RewriteCond %{HTTP_HOST} ^(.*).benb
RewriteCond %{REQUEST_URI} !^/{0,1}s_
RewriteRule ^(.*)$ s_%1/$1 [L]
这也捕获了域之前的所有文本..你应该能够改变:
RewriteCond %{HTTP_HOST} ^(.*).benb
至
RewriteCond %{HTTP_HOST} ^([^.]+).benb
只处理1级子域。你的另一部分(www | ftp | mail)也可以正常工作。
以上是关于.htaccess子域名重定向无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章