2014-11-21 74 views
0

我在嘗試配置託管PHP應用程序的託管爲api.myapp.com的APACHE虛擬服務器。mod_rewrite API路徑

PHP應用程序的途徑是

/* -> HTML 
/api/* -> JSON 

所以相同的Apache實例也舉辦app.myapp.com,剛剛擔任了HTML。

app.myapp.comapi.myapp.com指向PHP應用程序目錄的public/。我想要做的是:所有進入api.myapp.com/<method>的請求都被重寫爲api.myapp.com/api/<method>,但我恐怕還沒有成功。

下面是我在服務器配置部分想出了:

<IfModule mod_rewrite.c> 
    RewriteCond %{HTTP_HOST} api 
    RewriteRule^http://api.%{HTTP_HOST}%/api/{REQUEST_URI} [R=301,L] 
</IfModule> 

編輯:我的.htaccess的樣子;

<IfModule mod_rewrite.c> 
    Options -MultiViews 
    RewriteEngine On 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteRule^index.php [L] 
</IfModule> 
<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteCond %{HTTP_HOST} ^api\.myapp\.com$ 
    RewriteCond %{REQUEST_URI} !^/api 
    RewriteRule^/api%{REQUEST_URI} [L] 
</IfModule> 
+0

你打開了重寫引擎嗎?什麼是錯誤?什麼意思是「不成功」?服務器不啓動還是重定向失敗? – lordvlad 2014-11-21 10:46:58

+0

我確實認爲重寫引擎已打開,我查看了.htaccess文件中的重寫規則。沒有錯誤,重寫只是失敗而不改變任何東西。 – Ashesh 2014-11-21 10:54:15

+0

試試這個解決方案:http://stackoverflow.com/questions/8291712/using-clean-urls-in-restful-api使用RewriteRule ^/api/api.php或RewriteRule ^/api /([^\.]+ )。(xml | json | atom)api.php?url = $ 1&type = $ 2將所有請求發送到一個api.php文件,然後使用該php文件處理該任務。 – PHPGuru 2015-09-17 18:44:53

回答

0

嘗試

RewriteCond %{HTTP_HOST} ^api 
RewriteRule^http://%{HTTP_HOST}/api%{REQUEST_URI} [R=301,L] 
  1. 這是更好地使用更多的具體的規則:^ API - 主機與API
  2. API開始。不需要。 HTTP_HOST已經包含api。
  3. 用途%{REQUEST_URI},而不是{REQUEST_URI}
  4. REQUEST_URI已經包含第一/標誌

不要忘記RewriteEngine敘述上

+0

這打破了我的配置,現在我有一個重定向循環,並且它不斷地向路徑附加'api'。例如:api/api/api/api/api/api/api/api/api/api/api/api/api/api/api/api/api/api/API/API/API/API/API/API/API/API/API/API/API/API/API/API/API/API/API/API/API/API/API/API/API/API/API/api/api/api/api/api/api/api/api/api/api/api/api/api/api/api/v1/get-update?' – Ashesh 2014-11-21 11:04:06

0

大廈在Viktors答案,儘量延長重寫條件。

RewriteCond %{HTTP_HOST} ^api 
RewriteCond %{REQUEST_URI} !api 
RewriteRule^http://%{HTTP_HOST}/api%{REQUEST_URI} [R=301,L] 
+1

謝謝!試過了,但我得到了'RewriteCond:未知的標誌'AND''和Apache重啓失敗。有任何想法嗎? – Ashesh 2014-11-21 11:35:01

+0

哦,對不起,AND是隱含的,我已經更新了答案 – lordvlad 2014-11-21 15:07:36

+0

恐怕我已經嘗試過,現在它仍然不起作用。 – Ashesh 2014-11-21 15:10:45

1

前面的解決方案都是部分正確的。將兩者結合如下:

RewriteEngine On 
RewriteCond %{HTTP_HOST} ^api\.myapp\.com$ 
RewriteCond %{REQUEST_URI} !^/api 
RewriteRule^/api%{REQUEST_URI} [L] 
+0

我已經爲包含什麼.htaccess文件的問題添加了編輯。我希望有所幫助。您的解決方案仍然會導致重定向循環。 – Ashesh 2014-11-21 12:03:30