2012-02-11 112 views
1

我一直在尋找htaccess以及如何使用重寫規則爲用戶做出一種「假子域名」。htaccess「僞造子域名」

到目前爲止,我有:

RewriteEngine On 
RewriteBase/

RewriteCond %{HTTP_HOST} ^(www\.)?domain\.com 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ([a-z0-9-]+)/? http://$1.domain.com [R=301,NC,L] 

RewriteCond %{HTTP_HOST} ^([a-z]+)\.domain\.com$ 
RewriteRule ^$ index.php?user=%1 

這將採取任何/財產以後,並使它成爲一個子域,然後傳遞作爲一個參數去拿起子域值。

我希望現在能夠使用實際參數,並通過正常地將它們傳遞給「子域」 的額外「用戶」參數,例如,

fred.domain.com/index.php?page=1&sort=up 

會給我在$ _GET

['user'] = 'fred' 
['page']= 1 
['sort'] = up 

,但對我的生活我無法弄清楚如何做到這一點!因爲當我添加任何其他參數,我鬆了用戶位

任何幫助嗎? =)

另外任何有用的教程htaccess會很好!因爲所有的人發現,香港專業教育學院還沒有真正解釋每一位做了什麼,以及爲什麼事先= \

感謝

+0

您可以使用環境變量。查看mod_rewrite的apache文檔如何設置或引用它們。另外,你可以在你的PHP腳本和'$ _SERVER'超全局內部做到這一點。 – hakre 2012-02-11 16:17:10

+0

http://stackoverflow.com/questions/9732366/dynamic-subdomains-in-codeigniter-with-htaccess – santosh 2012-09-06 04:02:04

回答

0

.htaccess文件無關,在這裏做。它無法幫助你。
要將用戶引導至您的服務器,您必須更改DNS記錄,而不是網絡服務器配置。

+0

不完全。託管服務運營的大多數域名都提供了通配符子域路由。因此,與其他所有共享託管帳戶持有人一樣,我的DNS域名中包含一個子域名,它指向我的託管服務\(HS \)負載均衡IP 94.136.40.100。我的HS解碼HTTP_HOST以將所有子域指向我的DOCRROT,並且我必須使用我的DOCROOT'.htaccess'來處理子域。請參閱http://blog.ellisons.org.uk/search-Webfusion瞭解更多解釋的文章。 – TerryE 2012-02-11 17:19:23

+0

我的評論中沒有看到任何與我的答案相矛盾的東西,但無論如何感謝您的努力。 – 2012-02-11 17:42:19

+0

如果您的HS提供商已經設置了一個通配符DNS條目(大多數情況下都是這樣),那麼您在DNS中就沒有做任何事情,並且所有配置都在您的DOCROOT'.htaccess'中完成,你的陳述至少有誤導性:( – TerryE 2012-02-11 18:08:04

0

我敢肯定,您可以將vhost * .yourdomain.com設置爲指向單個路徑,然後使用mod_rewrite進行url解析。

0

我假設:

  • 你自己的域名,domain.com說,正被一些共享的託管服務(SHS)提供商託管。
  • 您可以訪問控制面板來設置子域名,或者您的SHS提供商已經設置了一條記錄到其共享服務的記錄映射。
  • 一些SHS提供者只是簡單地將*.domain.com映射到一個固定的子目錄,如/webroot/domain.com/public_html;其他人則爲其用戶提供頂級重定向,並提供一個控制面板,允許帳戶持有人將子域與特定的子目錄相關聯。

所以,你需要找出哪些適用於你的情況:通過看你的SHS提供商常見問題

  • ,試圖http://sss.domain.com/
  • ,看其路由到您的DOCROOT
  • 通過使用phpinfo()腳本查看它用於指向您的DOCROOT的重寫環境變量。(對於Apache的技術原因,看Dynamic mass virtual hosts with mod_rewrite,%{DOCUMENT_ROOT}無法正常初始化爲每個用戶,因此運營商通常使用一個RewriteMap初始化替身;礦用%{ENV:DOCUMENT_ROOT_REAL})

因此,讓我們假設你想建立自己的博客在說http://blog.domain.com/,您可能需要:

  • 發行永久重定向[R = 301]從傳統引用http://domain.com/blog/*http://blog.domain.com/*
  • 問題內部重定向從http://blog.domain.com/*DOCROOT/blogdir/*
  • 添加必要的條件聯鎖以防止無限重定向循環,其中此第二個內部重定向然後被視爲傳統引用。

我可以給你一套重寫規則來做到這一點,但考慮到我已經回答了這幾個月同樣Q的十幾種口味,你可以通過搜索或通過查看我的博客找到很多模板(Webfusion.htaccess)我寫了一些文章給出了更多的解釋。

如果你想有一個單一的應用程序趕上領域的一些通配符子集,只要你可以在正則表達式編碼這點,你可以這樣做:

RewriteCond %{HTTP_HOST} (sompattern)\.domain\.com 
RewriteRule ^(?!appdir/).* appdir/catchall.php?arg=$0&subdomain=%1 [L,QSA] 

(?!appdir/)位稱爲一個超前負斷言,並停止規則本身的反射。