2013-05-28 141 views
0

我想重寫我的子域名以及我的域名中的所有索引文件,如/index。到目前爲止,沒有必要使用子域名。現在問題是來自htaccess文件的重寫規則。這將重寫URL,如以下給定代碼所示:htaccess子域名重寫條件/規則

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's看起來像:

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

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

我使用清潔URL's因此,它僅僅是index而不是index.php等 默認調用頁面時,設置已經隱藏了index.php。問題將出現在我將更改語言的時候,意思是folderA和folderB。爲此,我讀出文件的基本名稱並使用頭函數重定向到右側的目錄。主要問題是子域。在這個領域它運作良好。正當我從URL中的文件夾中有一個索引頁:

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

,並讀出基本名(=>指數),將頭設置:

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

它會引起一個問題。網址將以錯誤的方式重寫。或者換個簡單的例子:

擁有的所有網頁上標識按鈕root/subdomain/folderA/

此按鈕,只需鏈接:<a href="/index.php">...</a>。該頁面的網址爲:subdomain.example.com/folderA/filexy點擊該鏈接的URL將被改寫爲www.example.com/subdomain/folderA/

+0

所以你不想重定向,例如'/ admin/index.html'到'/ admin /'的子域名? – anubhava

回答

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> 
+0

你好,這不起作用。 – bonny

+0

我的不好,我已經離開了OR開關(刪除「,或」請 –

+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 
+0

你好,並感謝回答這個問題。代碼奇怪的事情會發生。當我在該子域中有一個像'...'這樣的鏈接時,它會導致一個像'subdomain.example.com/subdomain/folder /' – bonny

+0

這樣的重寫URL。正如你所看到的,在上面的代碼中沒有規則在/子域文件夾中可能會有其他一些.htaccess。 – anubhava

+0

你好,我在問題中給出了進一步的信息。 – bonny