的.htaccess多个重写不工作

问题描述:

编辑 .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我对新代码进行了评论 –

这导致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

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] 

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