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>
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. –