以下是可用于使用Phalcon设置Apache的潜在配置。这些注释主要关注mod_rewrite模块的配置,允许使用友好URL和路由器组件。通常,应用程序具有以下结构:
test/
app/
controllers/
models/
views/
public/
css/
img/
js/
index.php
.htaccess
.htaccess
第一个放在根目录
这是最常见的情况,应用程序安装在文档根目录下的任何目录中。在这种情况下,我们使用两个.htaccess文件,第一个隐藏应用程序代码,将所有请求转发到应用程序的文档根目录(public/)。
请注意,使用.htaccess文件需要安装aspache才能设置AllowOverride All选项。
# test/.htaccess
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^$ public/ [L]
RewriteRule ((?s).*) public/$1 [L]
</IfModule>
第二个.htaccess 文件位于public/目录中,这会将所有URI重写为public/index.php文件:
# test/public/.htaccess
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^((?s).*)$ index.php?_url=/$1 [QSA,L]
</IfModule>
对于在uri参数中使用波斯字母’م’(meem)的用户,mod_rewrite存在问题。要使匹配与英文字符一样工作,您需要更改.htaccess文件:
# test/public/.htaccess
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([0-9A-Za-z\x7f-\xff]*)$ index.php?params=$1 [L]
</IfModule>
如果您的uri包含英语以外的字符,您可能需要采用上述更改以允许mod_rewrite准确匹配您的路由。
Apache配置
如果您不想使用.htaccess文件,可以将这些配置移动到apache的主配置文件中:
<IfModule mod_rewrite.c>
<Directory "/var/www/test">
RewriteEngine on
RewriteRule ^$ public/ [L]
RewriteRule ((?s).*) public/$1 [L]
</Directory>
<Directory "/var/www/test/public">
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^((?s).*)$ index.php?_url=/$1 [QSA,L]
</Directory>
</IfModule>
虚拟服务器
第二种配置允许您在虚拟主机中安装Phalcon应用程序:
<VirtualHost *:80>
ServerAdmin admin@example.host
DocumentRoot "/var/vhosts/test/public"
DirectoryIndex index.php
ServerName example.host
ServerAlias www.example.host
<Directory "/var/vhosts/test/public">
Options All
AllowOverride All
Require all granted
</Directory>
</VirtualHost>