2014-02-11 56 views
1

我試圖獲得一個API工作(本地,現在),它生活在一個子文件夾中。我一直在嘗試我可以找到的每個示例,但都以404錯誤結束。mod_rewrite - 從URL中刪除index.php(在子文件夾中)

我有這個網址:
http://127.0.0.1/~owner/personal/api/v1/index.php/tasks

我希望能夠利用這樣的:
http://127.0.0.1/~owner/personal/api/v1/tasks

最終,它會成爲這樣:
http://api.mydomain.com/tasks

我只是」 t似乎讓我的.htaccess規則正確設置。這一直得到建議,但什麼也沒做:

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ /index.php/$1 [L] 

我錯過了什麼?


更新

我安裝我的虛擬主機使用http://api.local/,而不是以前使用的地址。

訪問http://api.local/index.php/tasks作品。

訪問http://api.local/tasks沒有。

回答

1

也許你的問題的一部分是你的開發環境。您正在使用本地服務器對多個子文件夾執行此操作,並且我認爲這取決於您的位置與您的.htaccess混淆。

如果您.htaccess是在你的網站的根http://127.0.0.1/.htaccess那麼它不會正常工作。

請確保它與index.php文件位於同一目錄中,並確保/~owner/personal/api/v1/是您的開發環境document root,如您的apache配置文件中指定的那樣。

然後你可以測試你的htaccess規則,看看它們是如何工作的。您目前的規則應該沒問題,只要/tasks不會是根目錄中的真實目錄。

在另一方面,

我總是建議使用您的真實域名,所以你可以看到它是如何工作的,好像它是在生產。您可以通過在您的PC上修改您的HOST文件來實現此目的,並且該網站將只提供給您,並且you可以通過yoursite.com訪問。這個快速easy guide會告訴你。

嘗試指定重寫基準。

RewriteEngine On 
RewriteBase/
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ /index.php/$1 [L] 
+0

我不知道爲什麼這種情況在我以前沒有發生過。我在我的機器上安裝了虛擬主機,現在指向http://api.local/,而不是之前使用的地址。儘管如此,我仍然無法使重寫規則起作用,並且api堅持要在那裏擁有/index.php/。/v1文件夾設置爲root,並且.htaccess文件位於此處。雖然沒有運氣。 – Steve

+0

我剛剛注意到你的答案的第一部分......是的,它最終會成爲'http:// api.local/.htaccess' ......在這種情況下,如何改變重寫規則? – Steve

+0

嗯,這不應該需要,但也許嘗試指定重寫基地。在更新中看到我的例子。 –

0

反向使用參數RewriteRule。你需要這個:

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^/?(.*?)/index.php(.+)?$ /$1$2 

這意味着:

  • 如果它不是一個文件
  • ,它不是一個目錄
  • ,它看起來像/(可選),可能還有一些更多的字符,然後/index.php,然後可能會多一些字符,轉到URL沒有/index.php部分。

請注意,我現在刪除了[L] - 這意味着「如果URL符合此規則,請不要應用任何更多規則。」你說你想繼續改造成http://api.mydomain.com/tasks,所以你不應該使用[L]

+0

這看起來很有希望,但沒有奏效,不幸的是 – Steve