2016-12-18 6 views
0

Ich verwende eine Controller-Aktion in Yii2, um Bilder zu liefern (möglicherweise nach der Größenanpassung, falls erforderlich) und sie von Nicht-Site-Mitgliedern verborgen zu halten. Die Aktion lautet actionImage ($ id) im Site-Controller. Die Bilder werden in einem Basisverzeichnis namens images gespeichert, das sich möglicherweise außerhalb des DOCUMENT_ROOT befindet. Die Aktion benötigt einen Parameter, der den relativen Pfad zum Bild unter dem Ordner, z.B. Artikel/myimage.jpeg Ich habe folgende Konfiguration:Yii2 hübsche URL funktioniert auf Hosting aber nicht lokal

'urlManager' => [ 
      'enablePrettyUrl' => true, 
      'showScriptName' => false, 
      'enableStrictParsing' => false, 
      'rules' => [ 
       ... 
       'site/image/<id:^(\w+/){1}(\w+/){0,9}\w+\.\w+$ >' => 'site/image', 
       ... 
       , 
      ], 

Damit ich /site/image/articles/pasajes036.jpg erwarten, dass die Artikel/pasajes.jpg unter Bilder dienen.

Ich habe auch versucht <id:.+> in der Regel, aber das Ergebnis ist das gleiche heißt:

  • Es funktioniert gut, wenn sie von einem Remote-Server ausgeführt werden.
  • Es funktioniert nicht, wenn sie vom yii embeded Server (php yii dienen) Response ist

Die angeforderte Ressource /site/image/articles/pasajes036.jpg ausgeführt wurde nicht auf diese gefunden Server. - Das Bild wird serviert richtig, wenn sie mit

http://localhost:8080/site/image?id=articles/pasajes036.jpg 
  • Andere ziemlich url Arbeit auf beiden Servern (lokal und remote) genannt
  • Es funktioniert nicht lokal, auch wenn die Bilder-Ordner unter platziert DOCUMENT_ROOT

Vielen Dank für Ihre Hilfe.

+0

Was sind Ihr Server und lokale Betriebssysteme und Webserver? –

+0

Tatsächlich ist es nur der Punkt, der Probleme verursacht. – meaulnes

+0

Ich teste es mit sehr einfachen Mustern wie \ w + \. \ W +. Es funktioniert nur auf dem Remote-Server. – meaulnes

Antwort

0

Sie müssen Regeln für das Umschreiben des Servers festlegen, damit die hübschen URLs funktionieren.

Im Falle von Apache ist es einfach - Sie können einfach mod_rewrite Modul verwenden.

Für integrierte PHP-Server ist es komplizierter, aber immer noch möglich. Es gibt ein Beispiel unter gonzalo123.com:

Aber funktioniert es mit dem integrierten Webserver? Die Antwort ist ja, aber mit einer anderen Syntax. Wir brauchen nur ein Router-Datei erstellen und unserem Server mit diesem Router starten:

<?php 
// www/routing.php 
if (preg_match('/\.(?:png|jpg|jpeg|gif)$/', $_SERVER["REQUEST_URI"])) { 
    return false; 
} else { 
    include __DIR__ . '/index.php'; 
} 

Und wir starten jetzt den Server mit:

php -S localhost:8888 www/routing.php 

So brauchen Sie nur zu erstellen Routing von PHP-Skript, das das Umschreiben behandelt.

+0

Vielen Dank für die Antwort. Ich bin mir nicht sicher, ob ich das gut verstehe, denn es scheint das Gegenteil von dem zu sein, was ich erwarte. Die Verwendung von dem, was Sie mit dem eingebetteten yii-Server vorschlagen, führt zu URL wie localhost: 8080/routing.php/ /filename.jpeg zurückgewiesen werden. Aber beim Schreiben von if (preg_match ('/\.(?:)$/', ... URL-Regel in config/web.php funktioniert gut mit allen Dateierweiterungen. – meaulnes

+0

es funktioniert sogar mit routing.php nur mit der Include-Zeile – meaulnes

+0

This ist nur das Beispiel, Sie müssen es für Ihre Bedürfnisse ändern. – Bizley

Verwandte Themen