2016-06-14 55 views
2

編輯 .htacess:的.htaccess多個重寫不工作

RewriteEngine On 
RewriteRule ^(.*)/(.*)/(.*)/(.*)/ api.php/$1/$2?param=$3&key=$4 [L] 
RewriteRule ^(.*)/(.*)/(.*)/ api.php/$1/$2?param=$3 [L] 
RewriteRule ^(.*)/(.*)/ api.php/$1/$2 [L] 

這給出了這樣的錯誤:

Internal Server Error

更新

此代碼:

RewriteEngine On 
    RewriteRule ^(.*)/(.*)/(.*)/(.*)/ api.php/$1/$2?param=$3&key=$4 [L] 
    RewriteRule ^(.*)/(.*)/(.*)/ api.php/$1/$2?param=$3 [L] 

只有當該行添加它崩潰:

RewriteRule ^(.*)/(.*)/ api.php/$1/$2 [L] 
+0

更具體的規則應該首先出現。 – hjpotter92

+0

@ hjpotter92 改爲(給出了一個內部服務器錯誤):(。*)(*)(*)(。*)? RewriteEngine敘述在 重寫規則^//// api.php/$ 1/$ 2 PARAM (。*)/(。*)/(。*)/(。*)/ api.php/$ 1/$ 2?param = $ 3 [L] RewriteRule ^(。*)/(。 *)/ api.php/$ 1/$ 2 [L] –

+0

@ hjpotter92我對新代碼進行了評論 –

回答

1

這導致500內部錯誤,因爲你的規則是無限循環。這是因爲您的模式^(.*)/(.*)/也匹配重寫的URI api.php/<whatever>/

你需要跳過現有的文件和目錄的所有規則的頂部:

RewriteEngine On 

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

RewriteRule ^(.*)/(.*)/(.*)/(.*)/ api.php/$1/$2?param=$3&key=$4 [L,QSA] 

RewriteRule ^(.*)/(.*)/(.*)/ api.php/$1/$2?param=$3 [L,QSA] 

RewriteRule ^(.*)/(.*)/ api.php/$1/$2 [L,QSA] 

我也建議使用錨$在你的模式,以進一步保障。

+0

我已經完成了我想要的 –

+0

如果您注意到我也在我的回答中提出了使用'$'的建議 – anubhava

0
RewriteEngine On 

RewriteRule ^(.*)/(.*)/(.*)/(.*)/ api.php/$1/$2?organisation=$3&key=$4 [L] 
RewriteRule ^(.*)/(.*)/(.*)/ api.php/$1/$2?organisation=$3 [L] 
RewriteRule ^(.*)/(.*)/$ api.php/$1/$2 [L] 

上述的解決方案可能也正在