Apache-2.2

如何使用 mod_rewrite 抽象獲取子域的請求

  • December 11, 2013

我整天都在做這個,我以為我已經掌握了正則表達式,但我不再有信心我做到了。我到處搜尋,閱讀了一些關於 mod_rewrite 的可怕指南,我被難住了。

我想讓它打電話

subdomain.domain.com/u/satbirkira 

看起來與上面的完全一樣,但執行並顯示它而不是

domain.com/user.php?user_name=satbirkira?subdomain_given=subdomain

它應該非常簡單,但我無法理解。這是我想出的:

RewriteCond %{HTTP_HOST} ^(.*)user.php\?user_name=(.*)$ [NC]

RewriteRule ^(.*)$ http://%1%{REQUEST_URI}/u/$3

我不知道如果您刪除像第一個 (.*) 這樣的無用擷取點,為什麼 RewriteCond 會中斷,但我已經學會了順其自然。如果有人能解釋為什麼該方法不正確、語法、擷取點和替換以及變數,我將不勝感激。

編輯

它類似於http://roshanbh.com.np/2008/03/url-rewriting-examples-htaccess.html上 #4 的目標,“4) 將 yoursite.com/user.php?username=xyz 重寫為 yoursite .com/xyz”期望答案對我來說毫無意義。

通過重寫將這?user_name=satbirkira部分輸入 PHP 可能會有些棘手,具體取決於 PHP 訪問數據的方式 - 一些應用程序最終會獲得原始查詢字元串,而不是重寫的查詢字元串。

但是,現在,讓我們從這個開始,看看它會把我們帶到哪裡。這應該在VirtualHost上下文中,如果它在<Directory>.htaccess需要調整..

RewriteRule ^/u/([^/]+)/?$ /user.php?user_name=$1 [L]

對於.htaccess你不應該使用它!):

RewriteRule ^u/([^/]+)/?$ user.php?user_name=$1 [L]

引用自:https://serverfault.com/questions/560583