我刚创建了我的第一个Symfony2项目。但URL中的“/web/app_dev.php”部分让我很烦。应该可以在没有虚拟主机...
的情况下执行此操作但是当我通过.htaccess尝试这个时,我总是会遇到路由错误,并且“web /”总是被添加到网址中...
编辑:整个项目也位于名为“symfonyTest”的子目录中。演示页面的URL是“http://localhost/symfonyTest/web/app_dev.php/demo/”,它应该变为“http:// localhost / symfonyTest / demo /”。链接也应具有此语法。这可能吗?
答案 0 :(得分:21)
Symfony2带有内置调试模式,当你使用app_dev.php添加访问url时,你正在使用它。调试模式缓存显着少于生产模式,可以通过将浏览器定向到URL来访问,但省略app_dev.php。如果访问此URL不起作用,则可能意味着您需要清除生产缓存。
要清除缓存,请将终端(命令控制台)指向您Symfony项目的根目录。从那里输入以下命令:
php app/console cache:clear --env=prod --no-debug
以下在Symfony 3中的评论已经发生了变化:
php bin/console cache:clear --env=prod --no-debug
这应该清除您的制作缓存,并允许您在没有app_dev.php的情况下访问网址。
关于网址的网页部分。删除它的最简单方法是将项目的Web根目录设置为Web文件夹。使用虚拟主机的apache最好这样做,但是有很多方法可以使用htaccess。
此链接说明了如何使用htaccess文件更改webroot。 http://kb.siteground.com/how_to_change_my_document_root_folder_using_an_htaccess_file/
希望这有帮助!
答案 1 :(得分:11)
<VirtualHost *:80>
DocumentRoot "path_to_symfonyTest/web"
ServerName "symfonyTest"
<Directory "path_to_symfonyTest/web">
DirectoryIndex app_dev.php
AllowOverride All
Order allow,deny
Allow from all
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ app_dev.php [QSA,L]
RedirectMatch permanent ^/app_dev\.php/(.*) /$1
</Directory>
</VirtualHost>
我的httpd.conf
的一部分答案 2 :(得分:10)
我曾经遇到过这个问题,请查看我的配置然后试试看
在我的.htaccess里面:
大家好,我也遇到过这个问题。似乎“股票”.htaccess是问题所在。我已经在我的环境中解决了这个问题,这是我的.htaccess和笔记:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_URI}::$1 ^(/.+)/(.*)::\2$
RewriteRule ^(.*) - [E=BASE:%1]
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^app_dev.php(/(.*)|$) %{ENV:BASE}/$2 [R=301,L] ##### this is the part that you should tweak, have the .htaccess point the request to app_dev.php, since the routing.yml is empty initially
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule .? - [L]
RewriteRule .? %{ENV:BASE}/app_dev.php [L] ##### this is the part that you should tweak, have the .htaccess point the request to app_dev.php, since the routing.yml is empty initially
</IfModule>
<IfModule !mod_rewrite.c>
<IfModule mod_alias.c>
# When mod_rewrite is not available, we instruct a temporary redirect of
# the startpage 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>
在/ etc / apache2 / sites-available:
中的“symfony”条目中<VirtualHost 127.0.1.15>
ServerAdmin webmaster@localhost
ServerName symfony
DocumentRoot /var/www/Symfony/web
DirectoryIndex app.php
<Directory /var/www/Symfony/web>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
答案 3 :(得分:5)
如果您使用apache虚拟主机,则可以按照您希望的方式运行它。以下是来自xampp的示例虚拟主机:
<VirtualHost *:80>
ServerName myurl.local
# Basic stuff
DocumentRoot "C:/path/to/symfony/web"
DirectoryIndex app.php
<Directory "C:/path/to/symfony/web">
AllowOverride All
Allow from All
</Directory>
</VirtualHost>
重新启动Apache后,您可以通过http://myurl.local访问项目(不要忘记在C:\Windows\system32\drivers\etc\hosts
下配置您的主机文件!)。如果您想让dev环境(app_dev.php)没有显示在url中,请将DirectoryIndex更改为app_dev.php。
答案 4 :(得分:3)
//启用mod重写
sudo a2enmod重写
通过 AllowOverride All 更改 AllowOverride无的所有内容
文件:( /etc/apache2/apache2.conf )或( /etc/apache2/sites-available/000-default.conf ) - 让我使用/etc/apache2/apache2.conf文件。
示例:
<Directory /var/www/web/>
# enable the .htaccess rewrites
Options Indexes FollowSymLinks
#AllowOverride None #commented
AllowOverride All
Require all granted
</Directory>
答案 5 :(得分:2)
.htaccess
的父文件夹中需要web
个文件,但我不建议这样做。除了web
之外,该文件夹包含完整的源代码,二进制文件,供应商等等,因此您需要应用许多规则才能允许对web
文件夹进行Web访问,并禁止对其他所有文件进行Web访问。
所以,这是可行的,但我肯定会选择vhost解决方案......
答案 6 :(得分:0)
您只需将.htaccess
文件的内容复制到your-website.conf