重写域别名的规则

时间:2011-07-05 08:54:06

标签: mod-rewrite

情况:我有一个(主)域,它有几个别名域,每个域都指向同一个基于Plesk的服务器(例如,我有example.com为主,{{1 },something.net,以及其他几个作为主域帐户的别名)。这意味着每当我将域名输入任何别名的地址栏时,它就会直接进入主域(anotherone.co.uk)的帐户。

问题:根据别名的域名,我有example.com以不同的方式重定向每个域(例如,对域A的请求重定向到公司站点,域名b转到感谢网站等。)哪个效果很好,但如果在域名网址后添加目录(即index.php),则会出现somealias.com/something错误。

如果有人可以帮助我,我真的很感激,是一个(如果可能的话)单个重写规则集,它实际上会剥离所有尾随目录和/或GET请求,并且只保留键入的基本URL,所以然后,位于主域文档根目录中的php脚本可以接管并适当地处理请求。

奇怪的是,我无法在任何地方找到(简单)解决方案。是否必须单独为每个别名域定义规则?

3 个答案:

答案 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;])并加载相应的文件。
每次添加新别名时,都必须添加并输入哈希。如果它们不是动态生成的,那么维护这个哈希并不是很麻烦。

相关问题