2016-06-14 16 views
2

編集 .htacess:.htaccessの複数の書き換えdoesntの仕事

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] 

は、この行が追加された場合にのみ、それがクラッシュ:あなたのルールが無限ループしているので、それは500内部エラーの原因となっている

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

より具体的なルールは、最初に表示されます取り組んでいます。 – hjpotter92

+0

hjpotter92 @は(内部サーバーエラーを与える)に変更:(。*)(*)(。*)? のRewriteRule ^オン RewriteEngineを///(。*)/ api.php/$ 1/$ 2のparam = $ 3&key = $ 4 [L] RewriteRule ^(。*)/(。*)/(api.php/$ 1/$ 2?param = $ 3 [L] *)/ api.php/$ 1/$ 2 [L] –

+0

@ hjpotter92新しいコード –

答えて

1

。これは、あなたのパターン^(.*)/(.*)/も、書き換えられた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] 

上記のソリューションは、おそらくも