2014-11-22 52 views
0

我的.htaccess是2重寫規則的兩個不同但類似的URL

RewriteEngine On 
RewriteBase/
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
#RewriteRule ^api\/(.*)$ api.php?action=$1 [L,QSA] 
RewriteRule . index.php [L] 

,所以我接受我的index.php,然後解析查詢字符串,和我的網頁之一是「API文檔頁上的」所有請求網址http://domain.com/api所以我需要頁有關從模板

API和另一個URL爲http://domain.com/api.php,我需要接受$_GET['action']$_POST

另一個數據,因此會像http://domain.com/api.php?action=start,但是我需要調用它http://domain.com/api/starthttp://domain.com/api/start/和接收$_GET['action'] - "start"

但這串在我的.htaccess不工作

RewriteRule ^api\/(.*)$ api.php?action=$1 [L,QSA] 

回答

1

啊,我以前有這個問題,不記得到底如何它去了,但這個鏈接似乎相關:https://wiki.apache.org/httpd/RewriteFlags/QSA

與你唯一的區別是在開始時的斜線使路徑絕對,你不需要轉義斜線。例如。

RewriteEngine On 
RewriteBase/

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^api/([a-z]*)/? api.php?action=$1 [L,QSA] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . index.php [L] 

但是,這些差異似乎都不是導致問題的原因。正如nubhava所指出的那樣,RewriteCond隻影響下一個規則。 雖然面對這種情況,但我通常最終會使用路由器來做PHP中的「重寫」。 又見Mod-Rewrite or PHP router?

+0

它不工作,我的CSS,JS和圖像停止工作whitch是http://domain.com /css/reset.css和 – user2368299 2014-11-22 15:56:19

+1

可以肯定的是,你保留了RewriteCond的,對吧? – outlyer 2014-11-22 16:01:24

+0

這是我的RewriteCond's:RewriteCond%{REQUEST_FILENAME}!-f RewriteCond%{REQUEST_FILENAME}!-d – user2368299 2014-11-22 16:04:22

2

你需要每RewriteRule之前保持RewriteCond如果要適用於所有的網址或讓他們在一個單獨的規則。試試這個的.htaccess:

Options -MultiViews 
RewriteEngine On 
RewriteBase/

# ignore all files/directories from all rules below 
RewriteCond %{REQUEST_FILENAME} -f [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule^- [L] 

RewriteRule ^api/(.+)$ api.php?action=$1 [L,NC,QSA] 

RewriteRule . index.php [L] 
+0

我收到500服務器錯誤,但我已經自己做了,謝謝 – user2368299 2014-11-22 16:19:09

+0

您可以註釋掉'Options -MultiViews'行,可能'選項'不允許在您的.htaccess – anubhava 2014-11-22 16:23:38

0
RewriteEngine On 
RewriteBase/

RewriteRule ^api/([^/]*)$ /api.php?action=$1 [L] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . index.php [L] 

工作的,http://htaccess.madewithlove.be/幫助的我嘗試不同的組合