情况:我有一个(主)域,它有几个别名域,每个域都指向同一个基于Plesk的服务器(例如,我有example.com
为主,{{1 },something.net
,以及其他几个作为主域帐户的别名)。这意味着每当我将域名输入任何别名的地址栏时,它就会直接进入主域(anotherone.co.uk
)的帐户。
问题:根据别名的域名,我有example.com
以不同的方式重定向每个域(例如,对域A的请求重定向到公司站点,域名b转到感谢网站等。)哪个效果很好,但如果在域名网址后添加目录(即index.php
),则会出现somealias.com/something
错误。
如果有人可以帮助我,我真的很感激,是一个(如果可能的话)单个重写规则集,它实际上会剥离所有尾随目录和/或GET请求,并且只保留键入的基本URL,所以然后,位于主域文档根目录中的php脚本可以接管并适当地处理请求。
奇怪的是,我无法在任何地方找到(简单)解决方案。是否必须单独为每个别名域定义规则?
答案 0 :(得分:1)
尝试以下方法,
#Options +FollowSymLinks
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www.olddomain.com$[OR]
RewriteCond %{HTTP_HOST} ^olddomain.com$
RewriteRule ^(.*)$ http://www.newdomain.com/$1 [R=301,L]
答案 1 :(得分:0)
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !=/
RewriteCond %{REQUEST_URI} !=/index.php
RewriteRule .* http://%{HTTP_HOST}/? [L]
除了根文件夹/
(例如http://example.com/
)或索引文件(例如http://example.com/index.php
)之外,这将采用所有请求,并将它们重定向到根文件夹(例如http://example.com/some-url
将被重定向到http://example.com/
)。
您可能需要将index.php
替换为当您点击根文件夹时执行的文件(Apache将默默地将http://example.com/
重写为http://example.com/index.php
(具体取决于您的实际设置)它需要有一个文件来执行,否则可能会显示错误。)
或者(可能更好 - 取决于您的实际设置和要求)您可以使用这些规则 - 这将仅重定向不存在的网址。因此,如果您的网站上有图片meow.png
,则可以使用这些规则访问该图片(http://example.com/meow.png
):
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* http://%{HTTP_HOST}/? [L]
<强>更新强> 如果您要将其放入配置文件(httpd-vhost.conf或httpd.conf),请使用以下规则:
RewriteEngine On
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-f
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-d
RewriteCond %{REQUEST_URI} !=/index.php
RewriteRule .* http://%{HTTP_HOST}/? [L]
答案 2 :(得分:0)
在我看来,所有站点都托管在同一台服务器上(可能使用相同的代码库)。
如果您的index.php是前端控制器,您可以将所有内容重定向到index.php,并在index.php的第一行中决定要加载哪个前端控制器(如backend.php)。
如果您不介意维护别名列表,可以定义[alias] =&gt;的哈希值。路径到前端控制器。
在主域的前端控制器中,检查别名(对于哈希值使用$ _SERVER [&#39; SERVER_NAME&#39;])并加载相应的文件。
每次添加新别名时,都必须添加并输入哈希。如果它们不是动态生成的,那么维护这个哈希并不是很麻烦。