使用mod_rewrite进行双向URL映射和规范化

时间:2012-01-19 22:36:24

标签: apache .htaccess mod-rewrite joomla url-mapping

我很确定这部分与this question完全相反,但它只是两个部分而且有一些额外的错综复杂。

我最近为一个组织继承了一个网站(我们将其称为theorganization.com)并安装了Joomla!,而有人刚刚去购买了一个辅助域名(anevent.com),用于活动寄宿期望我们可以在我们现有网站的相关部分“指出”它。是的,简单的“屏蔽”可以在一个方向完成此操作,但我想规范化URL并使用mod_rewrite > 方向将其映射到< em> etc。(这是不是无限循环:一个方向是301重定向;另一个是URL掩码。)

我想在现有的Joomla上举办有关活动的信息!安装在theorganization.com/eventname/可访问的部分,并将其与新域相对应。 注意: Joomla!使用重写本身,因此将是eventname目录中的物理目录theorganization.com。 (不确定是否/如何影响这里的任何事情。)

具体来说,我希望向theorganization.com/eventnameanevent.com(有或没有www或尾随斜线)发出所有请求,以便为Joomla提供内容!通常会将theorganization.com/eventname/归为www.anevent.com/,同时将网址显示为theorganization.com。当然,这些级别下的所有子目录和文件也应相应地进行映射。


在查看Apache's mod_rewrite docs之后,我想出了下面的尝试。

适用于RewriteEngine On # STRIP "www" IF PRESENT (undesired, but necessary for now due to other issues) RewriteCond %{HTTP_HOST} ^www.theorganization.com$ [NC] RewriteRule ^(.*)$ http://theorganization.com/$1 [R=301,L] RewriteCond %{REQUEST_URI} ^/eventname/?(.*)$ [NC] RewriteRule ^http://(www\.)theorganization.com/eventname/?(.*)$ "http://www.anevent.com/$2" [R=301,L] # ... # ... default Joomla! .htaccess code here ...

.htaccess
经过多次试验,我发现我忘记了Joomla!默认情况下在anevent.com中有自己的重写,我无意中覆盖了它们。 (谢天谢地,我found a replacement。)但第二个(有效的)重定向似乎没有生效。我可能做错了什么?

适用于RewriteEngine On # ADD "www" IF MISSING RewriteCond %{HTTP_HOST} !^www\. [NC] RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L] # UNCONDITIONALLY DEFER ALL REQUESTS HERE TO theorganization.com/eventname/ RewriteRule ^(.*)$ http://theorganization.com/eventname/$1 [L]

http://theorganization.com/eventname/FOO

这看起来效果很好(基于我可以让第一个工作的假设)。但是,最后一行的无条件规则似乎充当301/302或类似的东西并加载http://www.anevent.com/FOO。如何修改此设置以实现“屏蔽”,以便用户只能在浏览器中看到{{1}},但仍然定向到相同的内容?

1 个答案:

答案 0 :(得分:1)

对于第一部分,将以下内容添加到theorganization.com网站

根目录中的.htaccess文件中
RewriteEngine on
RewriteBase /

#if its on theorganization.com domain
RewriteCond %{HTTP_HOST} theorganization\.com$ [NC]
#if the original request has eventname in it
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /eventname/ [NC]
# redirect eventname to anevent.com
RewriteRule ^eventname/(.*)$ http://www.anevent.com/$1 [R=301,L]

对于anevent.com:

您的规则具有完全限定的网址,因此会自动重定向。 我修改它如下所示进行服务器端重写,如下所示。

RewriteEngine on
RewriteBase /

#if not internal redirect
RewriteCond %{ENV:REDIRECT_STATUS} !200
RewriteRule ^(.*)$ theorganization.com/eventname/$1 [L]