htaccess子域的RewriteRule

时间:2011-09-21 09:05:40

标签: apache .htaccess mod-rewrite subdomain

说我有以下网站:

http://example.com/site

相同

http://site.example.com

我想知道我是否可以获得这样的东西

  

http://site.example.com/var/

使用apache2的mod_rewrite。


这是我的尝试:

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

当网址为http://example.com/site时,这就像魅力一样,但由于我只是一个初学者,我不知道如何让它适用于http://site.example.com

任何帮助都会非常感激。

2 个答案:

答案 0 :(得分:3)

第一部分将example.com/site/var重定向到site.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 on
这一行打开了重写引擎。否则它可能无法工作。
RewriteBase /
这一行设置了重写基础。当需要为每个目录重写设置基本URL时,此指令使用。默认值是当前物理路径,但在大多数情况下,URL中的URL与物理文件名路径直接相关,因此使用默认值是错误的。例如,当使用虚拟目录时,你应该正确地将此选项设置为mod_rewrite表现得很好。

RewriteCond%{HTTP_HOST}%{REQUEST_URI} ^(www。)?example.com/site /(.*)
在这一行中,第一个apache连接到变量(主机地址:www.example.com并请求URI:/site/var)。然后用我给出的模式检查结果。结果的第一个可以www.  之后应该是example.com/site/,最后它可以是任何东西。

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

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

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


此行是您在问题中添加的行:它会重写每个没有/且点缀为/site/?var=$1的网址。

答案 1 :(得分:1)

我找到了解决方案:

RewriteBase /

某些主机需要RewriteBase规范才能正常运行。 我希望这有帮助。