Mod rewrite 重写域别名的规则

Mod rewrite 重写域别名的规则,mod-rewrite,Mod Rewrite,情境:我有一个(主)域,它有几个别名域,每个都指向同一个基于Plesk的服务器(例如,我有example.com作为主域,有something.net,anotherone.co.uk,还有其他几个都是主域帐户的别名)。这意味着,每当我在任何别名的地址栏中输入域名时,它都会直接进入主域的帐户(example.com) 问题:基于别名的域名,我有一个index.php,它以不同的方式重定向每个域(例如,对域A的请求重定向到公司站点,域b转到感谢站点等),效果很好,但是如果在域URL之后添加了一个目

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

问题:基于别名的域名,我有一个
index.php
,它以不同的方式重定向每个域(例如,对域A的请求重定向到公司站点,域b转到感谢站点等),效果很好,但是如果在域URL之后添加了一个目录(即
somealias.com/something
)然后给出
404notfound
错误

如果有人能帮助我,我会非常感激的是一个(如果可能的话)重写规则集,它将基本上去掉所有后续目录和/或GET请求,只保留键入的基本URL,这样位于主域文档根目录中的php脚本就可以接管并适当地处理请求

奇怪的是,我在任何地方都找不到一个(简单的)解决方案。是否需要为每个别名域分别定义一个规则?

尝试以下方法

#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] 
试试下面的方法

#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] 
这将接受除根文件夹
/
(例如
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
(取决于您的实际设置),因为它需要一个文件才能执行,否则可能会显示错误)


或者(可能更好——取决于您的实际设置和要求)您可以使用这些规则—这将只重定向不存在的URL。因此,如果您的站点上有一个图像
meow.png
,这些规则将允许您访问它(
http://example.com/meow.png
):


更新: 如果要将其放入配置文件(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]
这将接受除根文件夹
/
(例如
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
(取决于您的实际设置),因为它需要一个文件才能执行,否则可能会显示错误)


或者(可能更好——取决于您的实际设置和要求)您可以使用这些规则—这将只重定向不存在的URL。因此,如果您的站点上有一个图像
meow.png
,这些规则将允许您访问它(
http://example.com/meow.png
):


更新: 如果要将其放入配置文件(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]

在我看来,所有站点都托管在同一台服务器上(可能使用相同的代码库)。 如果index.php是前端控制器,则可以将所有内容重定向到index.php,并在index.php的第一行中决定加载哪个前端控制器(如backend.php)。
如果您不介意维护别名列表,您可以定义[别名]=>前端控制器路径的散列。
在主域的前端控制器中,根据哈希值检查别名(例如使用$\u SERVER['SERVER\u name']),并加载相应的文件。

每次添加新别名时,您都必须向哈希中添加和条目。如果不是动态生成,则维护此哈希并不是一件很麻烦的事。

在我看来,所有站点都托管在同一台服务器上(可能使用相同的代码库)。 如果index.php是前端控制器,则可以将所有内容重定向到index.php,并在index.php的第一行中决定加载哪个前端控制器(如backend.php)。
如果您不介意维护别名列表,您可以定义[别名]=>前端控制器路径的散列。
在主域的前端控制器中,根据哈希值检查别名(例如使用$\u SERVER['SERVER\u name']),并加载相应的文件。

每次添加新别名时,您都必须向哈希中添加和条目。如果不是动态生成,则维护此哈希并不是一件很麻烦的事。

谢谢您的回答;但是,我希望尽量避免为每个别名域物理设置规则(我现在有大约15个别名,可能会被添加)。我想要的是以某种方式定义一个规则集,以便它能够提取地址栏中键入的任何基本URL(服务器名称)(例如,如果请求是example.co.uk/somedir,我希望它转到example.com-同样,如果键入的服务器名称是anotheralias.com/anotherdir,我希望它动态转到anotheralias.com)。希望这能澄清问题。感谢您的回答;但是,我希望尽量避免为每个别名域物理设置规则(我现在有15个别名,更可能是t