2017-01-02 4 views
1

Ich musste ein lokales dev System Rebuild auf meinem Laptop mit OSX, installiert die gleichen Apache/2.4, PHP/5.6.27 und Phalcon/2.0.7-Pakete . Server-Code erscheint korrekt zu funktionieren abgesehen von Routing (und .htaccess-Code korrekt ist, und das Hinzufügen in geeigneter Weise _url)Phalcon 2.x und 3.x Routing bricht mit Regex oder Platzhalter

Original-Routing-Code:

$di->set('router', function(){ 
    $router = new \Phalcon\Mvc\Router(); 
    $router->add("/{controller}/{id:\d+}", [ "action" => "index",]); 
    return $router; 
} 

Diese Route vorher für alle URIs gearbeitet, von/user (Benutzerliste anzeigen), zu/user/1234 (Benutzer anzeigen), zu Aktionen wie/user/do_action/1234. Ich habe das Routing nie mehr vertieft, da diese Route gerade funktioniert hat. Der Code, wie er auch ist, funktioniert in der Produktion (Ich spiegle die Bibliotheken, die in der Produktion verwendet werden, und erhalte lokal ein anderes Verhalten, aber ich sehe auch nicht, was anders sein könnte, was das abweichende Verhalten verursacht).

Nach der lokalen Neuinstallation funktionieren diese Pfade nicht mehr und default alles so, als wäre es nur/index/index. Ich kann nicht herausfinden, warum diese Route nicht mehr angemessen ist, wenn man bedenkt, dass ich die gleichen Phalcon/Apache/PHP/etc-Versionen wie zuvor (und in der Produktion) verwende.

In Bezug auf Workarounds, versuche ich expliziter Pfade. Diese Arbeit:

$router->add("/user", ['controller' => 'user','action'=>'index']); 
$router->add("/user/index", ['controller' => 'user','action'=>'index']); 

jedoch keine dynamische Routing-Verfahren arbeiten (was mit regex, Platzhalter, Variablen):

$router->add("/user/:action", ['controller' => 'user','action'=> 1 ]); 
$router->add("/:controller", [ "controller" => 1, "action" => "index",]); 
$router->add("/{controller}", [ "action" => "index",]); 
$router->add("/user/{id:[0-9]+}", ['controller' => 'user','action'=>'index', ]); 

ich eine Tonne der Forschung über das getan haben und nichts macht Sinn, andere als Es scheint, dass die Variablen/Regex ein häufiges Problem sind. Es macht mir nichts aus, ein Skript zu schreiben, um alle möglichen Routen zu erzeugen, indem ich die Controller-Dateien scanne, aber das würde immer noch erfordern, dass ID-Nummern funktionieren, aber das ist zu diesem Zeitpunkt noch ein Nicht-Starter.

Ich habe überprüft auch PCRE installiert ist und funktioniert (phpinfo zeigt PHP mit --with-pcre-regex kompiliert wurde und aktiviert ist, Bibliothek Version 8.02 2010-03-19.)

Vielen Dank im Voraus! Ich habe auch versucht, auf die neuere Phalcon/3.0.1 zu aktualisieren und sehe die gleichen Routing-Probleme. Ich dachte mir, ich würde versuchen, es in 2.0.7 zu lösen, da die Produktion derzeit läuft, und ich werde dieses andere Upgrade für einen anderen Tag speichern.

EDIT 1: Einschließlich httpd.conf und httpd-ssl.conf

# httpd.conf 

ServerRoot "/usr/local/opt/httpd24" 

Listen 8080 

LoadModule authn_file_module libexec/mod_authn_file.so 
LoadModule authn_core_module libexec/mod_authn_core.so 
LoadModule authz_host_module libexec/mod_authz_host.so 
LoadModule authz_groupfile_module libexec/mod_authz_groupfile.so 
LoadModule authz_user_module libexec/mod_authz_user.so 
LoadModule authz_core_module libexec/mod_authz_core.so 
LoadModule access_compat_module libexec/mod_access_compat.so 
LoadModule auth_basic_module libexec/mod_auth_basic.so 
LoadModule socache_shmcb_module libexec/mod_socache_shmcb.so 
LoadModule reqtimeout_module libexec/mod_reqtimeout.so 
LoadModule filter_module libexec/mod_filter.so 
LoadModule mime_module libexec/mod_mime.so 
LoadModule log_config_module libexec/mod_log_config.so 
LoadModule env_module libexec/mod_env.so 
LoadModule headers_module libexec/mod_headers.so 
LoadModule setenvif_module libexec/mod_setenvif.so 
LoadModule version_module libexec/mod_version.so 
LoadModule ssl_module libexec/mod_ssl.so 
LoadModule unixd_module libexec/mod_unixd.so 
LoadModule status_module libexec/mod_status.so 
LoadModule autoindex_module libexec/mod_autoindex.so 
<IfModule mpm_prefork_module> 
</IfModule> 
<IfModule !mpm_prefork_module> 
</IfModule> 
LoadModule dir_module libexec/mod_dir.so 
LoadModule alias_module libexec/mod_alias.so 
LoadModule rewrite_module libexec/mod_rewrite.so 

<IfModule unixd_module> 
User me 
Group staff 

</IfModule> 

<Directory "/Users/me/app/www"> 
    Options Indexes FollowSymLinks 
    Require all granted 
    AllowOverride All 
</Directory> 



ServerAdmin [email protected] 

ServerName localhost 

<Directory /> 
    AllowOverride none 
    Require all granted 
</Directory> 


DocumentRoot "/usr/local/var/www/htdocs" 
<Directory "/usr/local/var/www/htdocs"> 
    Options Indexes FollowSymLinks 

    AllowOverride None 

    Require all granted 
</Directory> 

<IfModule dir_module> 
    DirectoryIndex index.php 
</IfModule> 

<Files ".ht*"> 
    Require all denied 
</Files> 

ErrorLog "/usr/local/var/log/apache2/error_log" 

LogLevel warn 

<IfModule log_config_module> 
    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined 
    LogFormat "%h %l %u %t \"%r\" %>s %b" common 

    <IfModule logio_module> 
     LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio 
    </IfModule> 

    CustomLog "/usr/local/var/log/apache2/access_log" common 

</IfModule> 

<IfModule alias_module> 


    ScriptAlias /cgi-bin/ "/usr/local/var/apache2/cgi-bin/" 

</IfModule> 

<IfModule cgid_module> 
</IfModule> 

<Directory "/usr/local/var/apache2/cgi-bin"> 
    AllowOverride None 
    Options None 
    Require all granted 
</Directory> 

<IfModule mime_module> 
    TypesConfig /usr/local/etc/apache2/2.4/mime.types 

    AddType application/x-compress .Z 
    AddType application/x-gzip .gz .tgz 

</IfModule> 

<IfModule proxy_html_module> 
Include /usr/local/etc/apache2/2.4/extra/proxy-html.conf 
</IfModule> 

Include /usr/local/etc/apache2/2.4/extra/httpd-ssl.conf 
<IfModule ssl_module> 
SSLRandomSeed startup builtin 
SSLRandomSeed connect builtin 
</IfModule> 


LoadModule php5_module /usr/libexec/apache2/libphp5.so 

AddType application/x-httpd-php .php 

httpd-ssl.conf

# httpd-ssl.conf 

Listen 443 


SSLCipherSuite HIGH:MEDIUM:!MD5:!RC4 
SSLProxyCipherSuite HIGH:MEDIUM:!MD5:!RC4 


SSLHonorCipherOrder on 

SSLProtocol all -SSLv3 
SSLProxyProtocol all -SSLv3 

SSLPassPhraseDialog builtin 

SSLSessionCache  "shmcb:/usr/local/var/run/apache2/ssl_scache(512000)" 
SSLSessionCacheTimeout 300 


<VirtualHost dev.myserver.com:443> 
Options Indexes FollowSymLinks MultiViews 
DocumentRoot "/Users/me/app/www/" 
ServerName dev.myserver.com:443 
ServerAdmin [email protected] 
ErrorLog "/private/var/log/apache2/myserver-error_log" 
CustomLog "/private/var/log/apache2/myserver-access_log" common 


<Directory "/Users/me/app/www/"> 
     RewriteBase /Users/me/app/www/ 
     RewriteEngine On 
     RewriteCond %{REQUEST_FILENAME} !-d 
     RewriteCond %{REQUEST_FILENAME} !-f 
     RewriteRule ^(.*)$ index.php?_url=/$1 [QSA,L] 

    Options Indexes FollowSymLinks 
    Require all granted 
    AllowOverride All 
</Directory> 

TransferLog "/usr/local/var/log/apache2/access_log" 

SSLEngine on 

SSLCertificateFile "/usr/local/etc/apache2/2.4/dev.myserver.com.crt" 

SSLCertificateKeyFile "/usr/local/etc/apache2/2.4/dev.myserver.com.key" 


<FilesMatch "\.(cgi|shtml|phtml|php)$"> 
    SSLOptions +StdEnvVars 
</FilesMatch> 
<Directory "/usr/local/var/apache2/cgi-bin"> 
    SSLOptions +StdEnvVars 
</Directory> 

BrowserMatch "MSIE [2-5]" \ 
     nokeepalive ssl-unclean-shutdown \ 
     downgrade-1.0 force-response-1.0 

CustomLog "/usr/local/var/log/apache2/ssl_request_log" \ 
      "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b" 

</VirtualHost>         

.htaccess

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

Antwort

0

Es geht um Ihre Apache Konfiguration für 100%. Aber du hast es nicht zur Verfügung gestellt. Sie können dies zum Beispiel überprüfen - https://docs.phalconphp.com/en/latest/reference/routing.html#uri-sources

+0

Danke, Juri. Hinzugefügt in den Dateien httpd.conf und httpd-ssl.conf. Hoffentlich springt etwas heraus. Ich ging Zeile für Zeile und verglich alles von meinen Arbeits-Produktionskonfigurationen zu diesen und nichts scheint außerhalb der Norm zu liegen. Ich habe auch die Phalcon-Dokumente gründlich durchgelesen und eine Reihe von Möglichkeiten getestet. –