簡體   English   中英

htaccess“偽造子域”

[英]htaccess “faking subdomains”

我一直在研究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

這將使任何/ somthing成為子域,然后將子域值作為參數傳遞給它。

我希望現在可以使用實際參數,並通過“子域”中的額外“用戶”參數將它們傳遞給正常對象,例如

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

會給我$ _GET

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

但是對於我的一生,我不知道該怎么做! 當我添加任何其他參數時,我會松開用戶位

有什么幫助嗎? =)

另外,關於htaccess的任何有用的教程都很好! 因為我發現的所有對象都沒有真正解釋每一位的含義以及==的原因

提前致謝

.htaccess文件在這里無關。 它幫不了你。
要將用戶定向到您的服務器,您必須更改DNS記錄,而不是Web服務器配置。

我很確定您可以將vhost * .yourdomain.com設置為指向單個路徑,然后使用mod_rewrite進行url解析。

我假設:

  • 您擁有一個域名domain.com ,該域名由某些共享托管服務(SHS)提供商托管。
  • 您可以訪問控制面板來設置子域,或者您的SHS提供商已經設置了*到其共享服務的記錄映射。
  • 一些SHS提供商只是將*.domain.com /webroot/domain.com/public_html映射到固定的子目錄,例如/webroot/domain.com/public_html ; 其他人為用戶執行此頂級重定向,並提供一個控制面板,允許帳戶持有人將子域與特定子目錄相關聯。

因此,您需要確定哪種情況適用於您的情況:

  • 通過查看您的SHS提供商常見問題解答,
  • 通過嘗試http://sss.domain.com/來查看它是否路由到您的DOCROOT
  • 通過使用phpinfo()腳本查看它用來指向DOCROOT的Rewrite環境變量。 (由於Apache中的技術原因,請參見無法為每個用戶正確初始化具有mod_rewrite的動態大量虛擬主機 ,%{DOCUMENT_ROOT},因此提供者通常使用RewriteMap來初始化替身;我的使用%{ENV:DOCUMENT_ROOT_REAL})

因此,假設您要在http://blog.domain.com/上建立博客,則可能需要:

  • 發出從舊參考到http://domain.com/blog/*永久重定向[R = 301]http://blog.domain.com/*
  • 發出從http://blog.domain.com/*DOCROOT/blogdir/* 內部重定向
  • 添加必要的條件互鎖以防止無限重定向循環,在此情況下,此第二個內部重定向將被視為舊版引用。

我可以給您提供一組重寫規則來執行此操作,但是鑒於本月我已經回答了十二個相同的問題,您可以通過搜索或查看我的博客來找到很多模板( Webfusion.htaccess )在這里我寫了許多文章,提供了更多的解釋。

如果您希望單個應用程序捕獲域的通配符子集,只要可以在正則表達式中對其進行編碼,則可以執行以下操作:

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

(?!appdir/)位稱為前瞻性否定斷言,這將停止對自身進行(?!appdir/)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM