2016-03-20 21 views
0

Bir REST API kurmaya çalışıyorum ve URL deyince, örneğin, api/family bu bilgi ile bir JSON nesnesini döndürür. Ancak, api/'u eğik çizgiden sonra hiçbir şey yapmadan isset($_GET['url'])true olduğunu söylüyorum. İlk önce beyaz alan olduğunu düşündüğüm diziyi kırpmayı denedim, ama bu da değildi. Genelde PHP kodu: Ben ben yanlış htacess kurmak mümkün Eğer durum olduğunu sanmıyorum, ama ben bir etkiye sahip olabileceğini düşünebiliriz tek şey iken

if (isset($_GET['url'])) { 
    echo "WRONG"; 
} 

$_GET değişkeni (olmamasına rağmen). isset gerçek çıkışı neden keşfetme

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule api/(.*)$ api/api.php?url=$1 [QSA,NC,L] 
</IfModule> 

Herhangi bir yardım mutluluk duyacağız.

+1

Yeniden yazım kuralınız sayesinde * her zaman * ayarlayın. * Bir değer * olup olmadığını kontrol etmeniz gerekir. –

+0

Belirtildiği gibi, bir boş ($ _ GET ['url']) 'yapabilirdiniz – segFault

+0

@JohnConde İyileştirme konusunda herhangi bir öneriniz var mı? Sanırım bunun neden oluştuğunu anlıyorum, url api/api.php nedir? Url = başka bir deyişle url "boş" bir değerdir. Ayrıca, çok uzun bir süre öncesine kadar bir yan notta, localhost/api/api/api.php dizinine yönlendirme yaptım, böylece bir iyileştirme önerisi büyük ölçüde takdir edilecektir. – jimmyjacks

cevap

0

iyisi olarak, , yeniden yazma kuralı için boş bir değer izin vermez kontrol etmeye çalışın. Bu, gerçek bir değer olmadıkça, api URL'nize yeniden yazılmayacaktır.

değişiklik Hala if(!empty($_GET['url'])) yapabilirsiniz bu

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

için

RewriteRule api/(.*)$ api/api.php?url=$1 [QSA,NC,L] 

gelen RewriteRule desende senin regex bunu değil sağlamak olmadıkça ama apache alışkanlık rerwrite çünkü asla olmalı orada bir değer.

1

Yorumlar yoluyla da bahsedildiği gibi,temel kuralını RewriteRule api/(.*)$ api/api.php?url=$1 [QSA,NC,L] kuralı aracılığıyla boş bir değere ayarlarsınız.

if(empty($_GET['url']) veya empty($_GET['url']) gibi url'un içeriğini denetlemeyi deneyebilirsiniz. Bu durumda isset($_GET['url']) kullanmak true'u döndürecektir, çünkü url ayarlanmış, gerçek bir tanımı tutmuyor.


@PanamaJack çok daha uzun vadede ve daha büyük kapsam çözüm olarak hareket edeceğini RewriteRule kendisi değiştirmede mükemmel tavsiyelerde bulunmaktadır.

0

bu

if ($_GET['url']=='') { 
    echo "WRONG"; 
} 

veya isset ile

çok

if (isset($_GET['url'])) { 
    if ($_GET['url']=='') { 
     echo "WRONG"; 
    } 
} 
İlgili konular