2015-01-04 9 views
12

ich ein Problem mit der Integration der Winkel- und Yii2 haben Ich habe 2 Teile:Yii2 + AngularJS

  1. Regular Yii2 App
  2. -Controller, die mit actionIndex beginnt und arbeiten mit kantigem

Das Problem ist, wenn ich URL im eckigen Teil kopiere und eingebe, bekomme ich immer 404 Fehler. Eckige Konfig ist

Also, wie kann ich direkte Links im HTML5-Modus arbeiten, um richtige Seiten zu sehen? Pfad wie "/ construct/something" funktioniert nicht. Meine .htaccess ist:

RewriteEngine on 

# If a directory or a file exists, use the request directly 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
# Otherwise forward the request to index.php 
RewriteRule . index.php 
+0

können Sie uns die URL zeigen, zu welcher eckigen Anfrage und bekommen 404 ?? ist auch 'Konstrukt 'ein Verzeichnisname oder yii2 Controllername? – leninhasda

Antwort

0

Weil Sie auf dem virtuellen Verzeichnis (zB Alias ​​/ site/"/ dir /") arbeiten, können Sie

RewriteBase/site/ in Ihrer Apache-Konfigurationsdatei verwenden müssen .

+0

Ressource: http://StackOverflow.com/Questions/24974407/htaccess-Yii-2-Configuration –

+0

Aber yii App funktioniert gut mit solchen htaccess. Das Problem besteht in Fall eckigen URLs, wie ich vorher bemerkt habe –

0

Haben Sie hübsche URLs in der Konfiguration für den URL-Manager aktiviert?

Angular hat nichts mit diesem Problem zu tun, wenn Sie direkt auf die URL zugreifen und es nicht funktioniert, dann stimmt etwas nicht mit Ihrer Konfiguration.

1

.htaccess-Datei sieht richtig, aber wenn Sie Ihren Webserver DocumentRoot und Ihre Webapp in separaten Ordnern haben, müssen Sie, indem Sie den RewriteBase Pfad in Ihrer .htaccess Datei somthing wie dies bei Verwendung eines Unix-basierten Betriebssystem starten:

RewriteEngine on 

RewriteBase /~userName/pathToYourYiiProject/web 

# If a directory or a file exists, use the request directly 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
# Otherwise forward the request to index.php 
RewriteRule . index.php 

, wenn Sie keine Ergebnisse erhalten, wenn auf den Pfad manuell aus dem Navigator beitretenden dann müssen Sie prüfen, ob ziemlich Urls zuerst aktiviert werden:

'urlManager' => [ 
       'class' => 'yii\web\UrlManager', 
       'enablePrettyUrl' => true, 
       'showScriptName' => false, 
      ], 

(überprüfen Mihai Link für yii offizielle Dokumentation)

Überprüfen Sie auch, ob rewrite_module in Ihren Apache-Konfigurationen aktiviert ist. zu ermöglichen und die mod_rewrite in einem Linux-Betriebssystem laden werden Sie diese Skripte starten müssen:

$ cat /etc/apache2/mods-available/rewrite.load 
$ sudo a2enmod rewrite 
$ ls -al /etc/apache2/mods-enabled/rewrite.load 

schließlich daran erinnern, dass die jüngsten Apache-Versionen (ab 2.3.9) haben „AllowOverride None“ vorbelegt werden Sie ändern müssen es zu "AllowOverride All" in /etc/apache2/apache2.conf (wieder Pfad in Linux OS weiß nicht, ob es das gleiche in anderen Betriebssystemen ist). Starten Sie Ihren Apache-Server neu & überprüfen Sie manuell den Pfad in Ihrem Navigator, wenn Sie JSON Format Ergebnisse erhalten, dann funktioniert Ihr Back-End gut & AngularJs sollte in der Lage sein, damit zu kommunizieren.

1

Das Problem ist, dass Ihr WebServer die AngularJS-Indexansicht für alle Pfade liefern muss, die mit/construct/beginnen. Hier ist eine Lösung für eine URL-Regel in Yii2 die genau das tut:

In Ihrem config/main.php

'components' => [ 
    // other components here 
    'urlManager' => [ 
     // other URL Manager settings here 
     'rules' => [ 
      'construct/<path:(.*)>'=>'construct/index', 
     ], 
    ], 
] 

In Ihrem Controller/ConstructController.php:

public function actionIndex($path = '/') 
{ 
    // serve your angularJS index page here 
}