2011-06-11 135 views
1

我剛剛在我的網站上做了一個子域名主要因爲我想要一個特定的地址。htaccess和重寫

比方說我的網站是:http://website.com 我的子域是http://sub.website.com/home/username/public_html/sub/

其主文件夾當我進入子域名地址的地址suddently更改爲http//website.com/sub/

我怎能子域名地址?

編輯丹尼斯:

我有一個將所有http://www.website.comhttp://website.com

我用

RewriteEngine on 
Redirect to non-www 
RewriteCond %{HTTP_HOST} !^(website\.com)?$ 
RewriteRule (.*) http://website.com/$1 [R=301,L] 

即使我註釋掉的規則這個地址仍然變爲

http://website.com/sub/ 

最好的問候, 亞歷山大

+0

你不能輕易地將'sub.php?blahblah'重寫成一個漂亮的url,因爲重寫規則引擎不會匹配查詢字符串而沒有進行強化前提條件檢查。這樣做在PHP級別會更簡單。 – 2011-06-11 13:33:29

+0

好吧。但是,如果我創建一個子域http://sub.website.com並轉到該地址,然後地址突然更改爲http://website.com/sub/,是否可以保留http://子。 website.com地址? – Alexander 2011-06-11 14:01:03

+0

也許你在那裏有一個重定向的腳本。如果沒有,這將是一個問題,你的主機... – 2011-06-11 14:02:35

回答

2

我會想象這樣的事情會工作(未測試):

Options FollowSymLinks 
RewriteEngine On 
RewriteCond %{HTTP_HOST} !^website\.com 
RewriteCond %{HTTP_HOST} ^([^.]+) 
RewriteRule \?cat_id=([0-9]+)&photo_id=([0-9]+) http://website.com/$1/$2/ 
RewriteRule ^/(.*)/(.*)/ /%1.php?cat_id=$1&photo_id=$2 [P] 

注:根據documentation,有FollowSymLinks需要 是你可以重寫獲得重寫工作的一個選項。

第一個RewriteCond將確保「webiste.com」主機不被重寫(但 域名,如sub.website.com將)。第二個匹配任何東西 直到主機名的第一個點。這兩個必須成功,如果是這樣,主機 部分可以在%1中訪問。

第一個RewriteRule將args重寫爲php腳本,目錄路徑爲 (瀏覽器上的URL發生更改)。下一個RewriteRule使用[P] 標誌將任何形式爲/ xx/yy /的請求用代理傳遞給php腳本代理到%1.php(我們記住的主機名) 。

正如我所說,這沒有測試,但希望它會讓你「朝着正確的方向」。

編輯:從第一個重寫規則中刪除[R]

+0

謝謝我會做這方面的研究,並使其工作,然後當它工作時我會回來這裏! – Alexander 2011-06-11 14:25:56

0

另一種解決方案是爲您的子域設置一個專用的虛擬主機(應該已經是這種情況了,如果不是,您會遇到很多問題),並使該虛擬主機忽略主域的.htaccess指令。你應該確保你的子域配置獨立於主域的域配置。

比方說,你在子域VH是/home/username/public_html/sub/,當阿帕奇擔任這一directoy在index.php或index.html文件或其他任何它執行/home/username/public_html/sub/遞歸搜索所有的.htaccess的,/home/username/public_html//home/username//home/的DocumentRoot和/。因此,應用您主域中定義的規則(我認爲它在/home/username/public_html/)。

你可以告訴該子虛擬主機加入到忽略所有.htaccess文件它們是VH的DocumentRoot前:

<Directory /> 
    AllowOverride None 
</Directory> 
<Directory /home/username/public_html/sub/> 
    AllowOverride All 
</Directory> 

你甚至可以刪除AllowOverride All,刪除所有的.htaccess,並把你擁有的東西您的子域(如果有的話)的.htaccess直接位於<Directory /home/username/public_html/sub/>部分,而不需要Apache搜索文件系統上的配置部分(如此快),效果相同。