2016-05-29 88 views
6

我試圖重寫一個子域(不定向)到$ _GET參數爲這樣:國防部重寫關於子域GET參數

期望的結果:

http://go.example.bz/link/abcde -> http://example.bz/go/link?id=abcde 
or 
http://go.example.bz/hrm/employee/8 -> http://example.bz/go/hrm/employee?id=8 

什麼目前的工作:

http://example.bz/go/link/abcde -> http://example.bz/go/link?id=abcde 
and 
http://example.bz/go/hrm/employee/8 -> http://example.bz/go/hrm/employee?id=8 

本的.htaccess根:

RewriteEngine On 

RewriteRule ^go/link.php/([^/\.]+)/?$ go/link.php?id=$1 [L] 
RewriteRule ^go/hrm/employee.php/([^/\.]+)/?$ go/hrm/employee.php?parameter=$1 [L] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME}.php -f 
RewriteRule ^(.*)$ $1.php [NC,L] 

AddCharset UTF-8 .php 
Options -Indexes 

,這是我如何重定向子域名:

<VirtualHost *:80> 
    Servername go.example.bz DocumentRoot /var/www/go 
</VirtualHost> 

我不想重定向到 - >目標,而保持http://go.example.bz/link/abcde URL,但有/鏈接的結果?ABCDE

回答

2

我想,我的問題來自於不從子域網址,其中我發現這裏的答案https://css-tricks.com/forums/topic/remove-php-extension-from-subdomain-urls/,然後我交替我的RewriteRules這樣刪除擴展名爲.php:

RewriteEngine On 

RewriteRule ^go/link/([^/\.]+)/?$ go/link.php?id=$1 [L] 
RewriteRule ^go/hrm/employee/([^/\.]+)/?$ go/hrm/employee.php?id=$1 [L] 

RewriteEngine on 
RewriteCond %{HTTP_HOST} ^go\.example\.bz$ [OR] 
RewriteCond %{HTTP_HOST} ^www\.go\.example\.bz$ 
RewriteRule ^/?$ "http\:\/\/tgc\.bz\/go" [R=301,L] 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule ^([^\.]+)/$ $1.php 

AddCharset UTF-8 .php 
Options -Indexes 
+0

但是它是如何做到的:'http: //go.example.bz/hrm/employee/8 - > http://example.bz/go/hrm/employee?id = 8'? – anubhava

+0

我用id替換了參數 – jQuerybeast

0
RewriteEngine On 
RewriteCond %{HTTP_HOST} ^go.example.com 
RewriteRule ^(.*?)/(.*)$ http://example.com/go/$1?id=$2 [L] 
+0

這會將http://go.example.com/link重定向到http://example.com/go/go?id=link – jQuerybeast

+0

@jQuerybeast go.example.com/link'不匹配上面的規則。 –

1

您可以使用此規則在根的.htaccess:

RewriteEngine On 

RewriteCond %{HTTP_HOST} ^(?!www\.)([^.]+)\.(example\.com)$ [NC] 
RewriteRule ^(link)/(.+)$ http://%2/%1/$1?id=$2 [NC,L,QSA,R=302] 
+0

它似乎並沒有改變我得到的任何結果(500)。這裏是完整的.htaccess文件:http://pastebin.com/rbY5v2Cf – jQuerybeast

+0

是否有可能你可以解釋我是如何工作的,以便我可以替代它以適應我的需求,例如子目錄等。 – jQuerybeast

+0

我已經根據你的回答問題的要求,即'http://go.example.com/link/abcde - > http://example.com/go/link?id = abcde'。這裏'%1'是從子域的第一個分量即'go'捕獲的值。 '%2'是'example.com'。然後'$ 1'是'(link)','link'是'$ 2'中的一部分。 – anubhava

0

這是否幫助:

RewriteCond %{HTTP_HOST} ^go.example.com$ 
RewriteRule ^link/([a-zA-Z0-9]+)$ http://example.com/go/link?id=$1 [P] 
+0

這可以工作:http://example.com/go/link?id=abcde但是這會拋出500錯誤http://go.example.com/link/abcde – jQuerybeast

+0

你能檢查apache日誌中的確切錯誤嗎? –

+0

由於可能的配置錯誤,請求超出了10個內部重定向的限制。使用'LimitInternalRecursion'來增加$ – jQuerybeast