htaccess重写子域的条件/规则

时间:2013-05-28 18:14:43

标签: php .htaccess url dns rewrite

我想在我的子域和我的域中重写所有索引文件,例如/index。到目前为止,没有必要使用子域。现在问题是来自htaccess文件的重写规则。这将重写URL,如下面的给定代码所示:

RewriteRule ^index\.(htm|html|php) http://%{HTTP_HOST}/ [R=301,L]
RewriteRule ^(.*)/index\.(htm|html|php) http://%{HTTP_HOST}/$1/ [R=301,L]

意味着在域中将重写所有索引文件。这很好但不在子域中。现在我想我可以简单地为我的子域添加一个条件,如:

RewriteCond %{HTTP_HOST} !^subdomain\.example\.com$
RewriteCond %{HTTP_HOST} !^www\.

但幸运的是,这不起作用。

在此处提供更多信息是URL的样子:

http://www.example.com/index
and the subdomain:
http://subdomain.example.com/index

使用上面的代码,URL将是:

http://www.example.com/
and the subdomain:
http://subdomain.example.com/index

如果有人可以帮助我,那就太棒了。

非常感谢。

更新:

为了提供进一步的信息,我需要解释它是如何运作的。

在根目录中有子域的文件夹。

                                    --> /index.php
                      --> /folderA 
       --> /subdomain               
/root                 --> /folderB
                                    --> /index.php

网址如下:

http://www.example.com/subdomain/folderA/index

http://subdomain.example.com/folderA/index

我确实使用干净的网址,因此只有index而不是index.php等。 调用页面时,默认设置已隐藏index.php。问题是我什么时候会改变文件夹,意思是folderA和folderB。因此,我读出了文件的基本名称,并使用标题函数重定向到正确的目录。主要问题是子域。在域中它运作良好。就在我有一个带有URL的文件夹的索引页面时:

http://subdomain.example.com/folderA/(index will be hidden)

并将读出basename(=> index)并将标题为:

http://subdomain.example.com/folderB/(index will be hidden)
这将是一个问题。 URL将以错误的方式重写。或者另一个简单的例子:

root/subdomain/folderA/

的所有网页上都有一个徽标按钮

此按钮只是一个链接:<a href="/index.php">...</a>。页面网址为:subdomain.example.com/folderA/filexy点击该链接时,网址将被重写为www.example.com/subdomain/folderA/

2 个答案:

答案 0 :(得分:1)

你的规则如下:

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

# do nothing if subdomain
RewriteCond %{HTTP_HOST} !^subdomain\.example\.com$ [NC]
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule - [L]

RewriteRule ^index\.(htm|html|php) http://%{HTTP_HOST}/ [R=301,L]
RewriteRule ^(.*)/index\.(htm|html|php) http://%{HTTP_HOST}/$1/ [R=301,L]

PS:虽然我建议您查看DirectoryIndex directive,然后您可以使用以下代码替换上述代码:

DirectoryIndex index.htm index.html index.php

答案 1 :(得分:0)

试试这个:

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteCond %{HTTP_HOST} !^subdomain\.example\.com$ [NC]
    RewriteRule ^/index\.(htm|html|php)$  http://%{HTTP_HOST}/$1 [NC,R=301,L]    
</IfModule>