Symfony2 - 如何从我的 url 中删除 'web/app_dev.php/'?
Symfony2 - How can I remove 'web/app_dev.php/' from my url?
当我想让我的 symfony 网站上线时,如何从我的 url 中删除 'web/app_dev.php/'?
这是开发过程中的默认值url,
http://{localhost}/my-symfony-2/web/app_dev.php/hello/World
所以当我上线时,我希望能够使用这个 url 访问我的 symfony 网站,
http://my-symfony-2.com/hello/World
有什么想法吗?
如果您有权访问部署服务器,您可以从终端使用:
php app/console cache:clear --env=prod
这将清除产品缓存,您将能够使用标准路由。
但是如果您在无法访问终端的主机上部署应用程序,需要找到 app/cache/*
和 app/logs/*
并删除它们的内容,然后添加适当的权限 (766 |777) 用于文件夹。
要隐藏 app.php
您需要:
- 至少可以访问您网站的网络根目录。通常在您的虚拟主机 space 的控制面板上,您可以找到可以上传文件的地方(或者如果您有访问凭据,您可以安装和使用免费的 FTP 客户端,例如 Filezilla).
- 检查您是否在 Apache 中安装并启用了
mod_rewrite
模块,查看 "apache2handler" 下的 phpinfo()
---> "Loaded Modules" 目录(您应该有这种可能性直接通过控制面板)。
完成这些检查后,您必须:
注意:Symfony2 已经带有存储在默认 Web 目录中的 .htaccess
文件,但如果您不知道自己在做什么,最好替换"IfModule mod_rewrite.c" 中包含如下所示的指令。
使用本机 Symfony2 .htaccess
或创建一个新文件,扩展名为 .htaccess
并且在这些指令中包含 copy/paste 以隐藏 app.php
生产(不在本地主机上):
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^app\.php(/(.*)|$) %{CONTEXT_PREFIX}/ [R=301,L]
RewriteRule .? - [L]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^(.*)$ app.php [QSA,L]
RewriteCond %{REQUEST_URI}:: ^(/.+)(.+)::$
RewriteRule ^(.*) - [E=BASE:%1]
RewriteRule .? %{ENV:BASE}app.php [L]
</IfModule>
# and from the symfony's original
<IfModule !mod_rewrite.c>
<IfModule mod_alias.c>
# When mod_rewrite is not available, we instruct a temporary redirect of
# the start page to the front controller explicitly so that the website
# and the generated links can still be used.
RedirectMatch 302 ^/$ /app.php/
# RedirectTemp cannot be used instead
</IfModule>
</IfModule>
要应用您需要重新启动 Apache 的修改(这通常在您的网络 space 的控制面板上完成)。
谷歌搜索一下,您可以找到大量示例和教程,但要开始学习,请查看这个简单的 .htaccess guide with many useful infos and examples and the Official URL Rewriting Guide (Apache2.4)。如果您遇到问题,请更新您的 post 添加所有相关信息,否则您可以在此处提出另一个问题。
当我想让我的 symfony 网站上线时,如何从我的 url 中删除 'web/app_dev.php/'?
这是开发过程中的默认值url,
http://{localhost}/my-symfony-2/web/app_dev.php/hello/World
所以当我上线时,我希望能够使用这个 url 访问我的 symfony 网站,
http://my-symfony-2.com/hello/World
有什么想法吗?
如果您有权访问部署服务器,您可以从终端使用:
php app/console cache:clear --env=prod
这将清除产品缓存,您将能够使用标准路由。
但是如果您在无法访问终端的主机上部署应用程序,需要找到 app/cache/*
和 app/logs/*
并删除它们的内容,然后添加适当的权限 (766 |777) 用于文件夹。
要隐藏 app.php
您需要:
- 至少可以访问您网站的网络根目录。通常在您的虚拟主机 space 的控制面板上,您可以找到可以上传文件的地方(或者如果您有访问凭据,您可以安装和使用免费的 FTP 客户端,例如 Filezilla).
- 检查您是否在 Apache 中安装并启用了
mod_rewrite
模块,查看 "apache2handler" 下的phpinfo()
---> "Loaded Modules" 目录(您应该有这种可能性直接通过控制面板)。
完成这些检查后,您必须:
注意:Symfony2 已经带有存储在默认 Web 目录中的 .htaccess
文件,但如果您不知道自己在做什么,最好替换"IfModule mod_rewrite.c" 中包含如下所示的指令。
使用本机 Symfony2
.htaccess
或创建一个新文件,扩展名为.htaccess
并且在这些指令中包含 copy/paste 以隐藏app.php
生产(不在本地主机上):<IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{ENV:REDIRECT_STATUS} ^$ RewriteRule ^app\.php(/(.*)|$) %{CONTEXT_PREFIX}/ [R=301,L] RewriteRule .? - [L] RewriteCond %{REQUEST_FILENAME} -f RewriteRule ^(.*)$ app.php [QSA,L] RewriteCond %{REQUEST_URI}:: ^(/.+)(.+)::$ RewriteRule ^(.*) - [E=BASE:%1] RewriteRule .? %{ENV:BASE}app.php [L] </IfModule> # and from the symfony's original <IfModule !mod_rewrite.c> <IfModule mod_alias.c> # When mod_rewrite is not available, we instruct a temporary redirect of # the start page to the front controller explicitly so that the website # and the generated links can still be used. RedirectMatch 302 ^/$ /app.php/ # RedirectTemp cannot be used instead </IfModule> </IfModule>
要应用您需要重新启动 Apache 的修改(这通常在您的网络 space 的控制面板上完成)。
谷歌搜索一下,您可以找到大量示例和教程,但要开始学习,请查看这个简单的 .htaccess guide with many useful infos and examples and the Official URL Rewriting Guide (Apache2.4)。如果您遇到问题,请更新您的 post 添加所有相关信息,否则您可以在此处提出另一个问题。