.htaccess 萬用字元子域路徑
我的網站設置如下:
RewriteCond %{HTTP_HOST} !^www\.example\.com RewriteCond %{HTTP_HOST} ([^.]+)\.example\.com [NC] RewriteRule ^/?$ /user/profile.php?name=%1 [L]
這樣做是如果使用者訪問:
test.example.com
,它將顯示文件內容:example.com/user/profile.php?name=test
。如果有人去lol.example.com
,它將顯示 page:example.com/user/profile.php?name=lol
但 URL 將與子域保持相同,例如test.example.com
和lol.example.com
。那部分正在工作。
問題:
如果我轉到
test.example.com/login
,它將顯示我的域根文件。我怎樣才能讓它顯示/user
文件夾中的東西?例如:
test.example.com/login
將顯示example.com/user/login
並將test.example.com/register
顯示example.com/user/register
,但 URL 將與子域保持相同?test.example.com/pathtofile
應該得到example.com/user/pathtofile
. “pathtofile”應該是動態的。我只想查看文件夾的路徑/user
,而不是根文件夾。
如果有人去
lol.example.com
,它將顯示 page:example.com/user/profile.php?name=lol
。嚴格來說,它會顯示頁面:(
lol.example.com/user/profile.php?name=lol
子域沒有被刪除)。但是由於(我假設)所有子域和主域都指向文件系統上的同一個位置,所以它可以工作。
test.example.com/pathtofile
應該得到的內容example.com/user/pathtofile
test.example.com/
您的原始指令僅重寫對文件根 ( )的請求。要重寫/pathtofile
,您可以在.htaccess
. 例如:RewriteCond %{HTTP_HOST} !^www\.example\.com RewriteCond %{HTTP_HOST} [^.]+\.example\.com [NC] RewriteCond %{REQUEST_URI} ^/([^/]+)$ RewriteRule !^user/ /user/%1 [L]
這將重寫所有尚未開始
/user/
且僅包含單個(非零長度)路徑段的請求,如您的範例(例如,/pathtofile
而不是/path/to/file
),並重寫為/user/pathtofile
.**更新:**如果你有一個
ErrorDocument
定義,那麼你需要在你的 .htaccess 文件中更早地創建一個異常,以防止錯誤文件的子請求被重寫。例如:RewriteRule ^404\.php$ - [L]