0

我想重写/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

URL看起来像这样:

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

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

我确实使用了干净的 URL,因此它只是index而不是index.php等等。默认设置在调用页面时已经隐藏了 index.php。问题将是我何时更改语言,这意味着文件夹A 和文件夹B。因此,我读出了文件的基本名称并使用 header 函数重定向到正确的目录。主要问题是子域。在域中它运行良好。就在我从带有 URL 的文件夹中获得索引页时:

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

并将读出基本名称(=>index)并将标题指向:

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

就会出问题。URL 将以错误的方式重写。或者另一个简单的例子:

在所有页面上都有一个徽标按钮root/subdomain/folderA/

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

4

2 回答 2

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 指令,然后你可以用这一行替换上面的代码:

DirectoryIndex index.htm index.html index.php
于 2013-05-28T19:52:46.177 回答
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>
于 2013-05-28T18:24:03.133 回答