2011-09-21 64 views
1

htaccess的重写规则说我有以下站点:子站点

http://example.com/site

这是我在想,如果我能得到这样的事情

相同的

http://site.example.com

http://site.example.co m/var/

使用apache2的mod_rewrite。


这里是我的尝试:

RewriteEngine on 
RewriteRule ^([^/\.]+)$ /site/?var=$1 

这就像当URL是http://example.com/site魅力,而是因为我只是一个初学者,我不知道如何得到这个为http://site.example.com工作。

任何帮助将非常感激。

+0

你把.htacess文件放在哪里?在网站目录? – undone

+0

是的,我已经把它放到mydomain.com/html/site那是网站目录 – Simone

+0

我很困惑!你确定你的重写规则适用于example.com/site?因为它在我看来应该适用于site.example.com! – undone

回答

3

第一部分重定向example.com/site/varsite.example.com/var。 二重写规则,重写您的网址site.example.com,

RewriteEngine on 
RewriteBase/
RewriteCond %{HTTP_HOST}%{REQUEST_URI} ^(www\.)?example.com/site/(.*) 
RewriteRule (.*) http://site.example.com/%1 [R=301,L] 

RewriteRule ^([^/\.]+)$ /site/?var=$1 [L] 

说明:
RewriteEngine叙述上
此行启用重写引擎。否则可能无法工作。
RewriteBase/
这行设置了重写基地。这个指令在想要为每个目录重写设置基本URL时使用。默认值是当前的物理路径,但在大多数情况下,基于URL的路径与物理文件名路径没有直接关系,所以使用默认值是错误的。例如当使用虚拟目录时,你应该正确地设置这个选项,以使mod_rewrite运行良好。 ?

的RewriteCond%{HTTP_HOST}%{REQUEST_URI} ^(WWW)example.com/site/(.*)在此行中第一阿帕奇
加入到变量(主机地址:www.example.com和请求URI :/site/var)。然后用我给出的模式检查结果。首先结果可以www. 。之后应该是example.com/site/并在最后它可以是任何东西。

RewriteRule (.*) http://site.example.com/%1 [R=301,L] 


这一行重定向用户请求http://site.example.com/%1与301的状态代码。因为它有L标志这是apache检查的最后一条重写规则。 %1是重写条件中标记为(.*)的所有内容。

RewriteRule ^([^/\.]+)$ /site/?var=$1 [L] 


这条线是你把你的问题行:它重写不具有//site/?var=$1点的每个URL。

+0

它的工作原理!谢谢!而且..可以请你简单地向我解释你的代码吗?赏金将是你的:) – Simone

+0

只是觉得它不起作用,如果我输入** www **。example.com/site ...我该如何解决? – Simone

+0

@Simone Vittori我编辑了代码并添加了解释! – undone

1

我已经找到了解决办法:

RewriteBase/

一些主机需要RewriteBase规范,以工作。 我希望这可以帮助。