Apache-2.2
如何使用 mod_rewrite 抽象獲取子域的請求
我整天都在做這個,我以為我已經掌握了正則表達式,但我不再有信心我做到了。我到處搜尋,閱讀了一些關於 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]