2013-08-27 172 views
0

所以我一直堅持這一點,它或多或少把我的項目頂部。htaccess不重定向url

剛剛開始一項新工作,目前的任務是爲我們啓動的新項目創建一個API系統。它基於WordPress的修改版本,我的目標是接受/ contrib/api的任何請求,並將其直接轉發到我設置的文件中,以便對傳入網址進行排序並進行相應的重定向。

這是我目前有:

<IfModule mod_rewrite.c> 
    RewriteEngine On 

    RewriteBase /contrib/ 

    RewriteCond %{REQUEST_URI} ^/api/ 
    RewriteRule ^/content/apis/apis\.php$ - [L] 

    RewriteRule ^index\.php$ - [L] 

    # uploaded files -- no longer needed since we're serving files directly via apache 
    # RewriteRule ^([_0-9a-zA-Z-]+/)?files/(.+) wp-includes/ms-files.php?file=$2 [L] 

    # add a trailing slash to /network and /wp-admin 
    RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L] 
    RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin/network$ $1wp-admin/network/ [R=301,L] 

    RewriteCond %{REQUEST_FILENAME} -f [OR] 
    RewriteCond %{REQUEST_FILENAME} -d 
    RewriteRule^- [L] 
    RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) wordpress/$2 [L] 
    RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ wordpress/$2 [L] 
    RewriteRule . /contrib/index.php [L] 
</IfModule> 

這一切都在這裏我面前,除了靠近頂部:

RewriteCond %{REQUEST_URI} ^/api/ 
RewriteRule ^/content/apis/apis\.php$ - [L] 

我的目標,如前所述,是採取從/任何要求contrib/api /並將其重定向到我的文件而不是繼續。相反,它似乎跳過並繼續並指向wp-admin(在我認爲的重定向之後)。無論如何,似乎我的命令沒有被抓住,我不知道爲什麼。

我認爲這些命令是先來處理的,但是如果它繼續下去,將我的代碼移動到最後使它工作?

我知道這是一件很容易測試的事情,但我希望能夠了解我在做什麼/做錯了什麼,以及我還沒有訪問服務器以實際上傳/測試代碼沒有經過我的老闆,我想了2周,可能不是一個好主意,要求我的老闆每5分鐘測試一次代碼,呵呵:(

編輯:按照Bob Vale的通知,修復了路徑問題。

回答

1

你不需要RewriteCond的規則將做無論如何比賽,你只需要

RewriteRule ^contrib/api/ /content/apis/apis.php [L] 

這將重寫任何URL用了contrib/API開始文件/content/apis/apis.php

+0

好吧,實際上,它應該是 '的RewriteCond%{REQUEST_URI} ^/API/ 重寫規則^ /的contrib /apis/apis\.php$ - [L]' 我搞砸了文件結構。 但仍然,它不應該試圖轉發到文件,但然後失敗,因爲它無法找到該文件(在我的不正確的代碼)? 此外,是不是RewriteCond必要?我只想轉發到API,如果URL調用它,其他一切應該移動到Wordpress如下? – RhoVisions

+0

@RhoVisions nope,你的規則停止,因爲路徑不匹配,當條件不滿足,它停在那裏,什麼都不做。 – Prix

+0

@RhoVisions如果'RewriteRule'已經定義了我更新的答案所做的匹配,'RewriteCond'是不必要的。如果目標php文件也位於同一Url下,並且您需要cond明確排除它,那麼您只能真正使用rewritecond。 –