2015-05-01 36 views
1

我有一個當前的REST API其中URL的使用看起來像如下:省略 「公共」 從URL中使用的.htaccess重寫

example.com/public/products 
example.com/public/products/123 

我已在URL結構更新爲:

example.com/products 
example.com/products/123 

的問題是這個REST API的當前用戶只連接到'公共'URL,所以這個更新會給他們404錯誤。如何在我的重寫中添加規則,這樣GET請求就可以在沒有「public」的情況下正確處理帶有「public」的URL。

example.com/public/products -> example.com/products 
example.com/public/products/123 -> example.com/products/123 

我該如何編寫一個重寫規則來爲我做這件事?

回答

0

的.htaccess:

RewriteEngine On 
RewriteRule ^public/(.*)$ $1 [R=301,L] 

你可以在這裏進行測試:http://htaccess.madewithlove.be/


正則表達式:

^
比賽開始字符串(T在這種情況下他是URL路徑)。

public/
匹配字符串「public /」。

(.*)
括號使這個捕獲組; .匹配除換行符之外的任何字符; *匹配零個或多個前一個標記。

$
匹配字符串的結尾。


輸出URL(用捕獲組參考號碼):

$1:插入的捕獲組#1


選項的內容:

[R=301,L]:執行301 [R]edirect並且表示這是[L] ast規則,因此立即停止重寫過程。


Apache模塊mod_rewrite的文檔:http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html

+0

謝謝您的建議。我試過這個規則..它帶我去http://example.com/apache/example.com/web/public/products這是應用程序的服務器路徑。沒有工作.. – vick

+0

選項-MultiViews RewriteEngine敘述在 #重定向結尾的斜槓... 重寫規則^公共/(.*)$ $ 1 [R = 301,L] #拉手前端控制器... 的RewriteCond %{REQUEST_FILENAME}!-d RewriteCond%{REQUEST_FILENAME}!-f RewriteRule^index.php [L] 這就是我的.htaccess文件,希望它們允許在commments上格式化。 – vick