我已经完成了第一次安装Symfony2,
php app/console --version
Symfony version 2.0.11 - app/dev/debug
我通过配置我的apache2服务器vhost
将其安装在现有的DocumentRoot下 <VirtualHost 127.0.0.1:80>
...
DocumentRoot /srv/www/localhost_www
...
<Directory "/srv/www/localhost_www" >
AllowOverride none
Options -ExecCGI +FollowSymLinks +Includes +Indexes +MultiViews
Order Allow,Deny
Allow from All
</Directory>
...
Alias /TESTAPP "/srv/www/TESTAPP/web/"
<Directory "/srv/www/TESTAPP/web/">
Options All
AllowOverride All
Allow from All
</Directory>
Alias /TESTAPP.symfony "/srv/www/TESTAPP/"
<Directory "/srv/www/TESTAPP/">
Options All
AllowOverride All
Allow from All
</Directory>
...
安装完成后,成功关注“The Book”构建演示“Hello”应用程序,如果我在浏览器中导航到任何/所有,
dev:
http://localhost/TESTAPP.symfony/web/app_dev.php/hello/ME
http://localhost/TESTAPP/app_dev.php/hello/ME
prod:
http://localhost/TESTAPP.symfony/web/app.php/hello/ME
http://localhost/TESTAPP/app.php/hello/ME
我看到了预期的,
“你好我!”
我想重写仅生产网址,隐藏“app.php”,以便以下一组网址在我的Symfony2应用的浏览器导航栏中工作:
dev:
http://localhost/TESTAPP.symfony/web/app_dev.php/hello/ME
http://localhost/TESTAPP/app_dev.php/hello/ME
prod:
!! http://localhost/TESTAPP.symfony/web/hello/ME
!! http://localhost/TESTAPP/hello/ME
Iiuc,默认网页/ .htaccess
cat web/.htaccess
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ app.php [QSA,L]
</IfModule>
需要改变。
我在文档和网络上进行了挖掘,尝试了修改RewriteRule的vdiffferent建议,添加了“RedirectMatch永久”等等,而且我没有设法得到一个简单的
http://localhost/TESTAPP/hello/ME
永远的工作。我似乎总是需要添加“/app.php /".
为了让它发挥作用,我需要做出哪些具体改变?
感谢。
@chasen
是的是否为apache启用了mod_rewrite?
如果您的网站目录中有.htaccess文件
我做
并托管指向Web文件夹的文件
如上所述,
Alias /TESTAPP "/srv/www/TESTAPP/web/"
<Directory "/srv/www/TESTAPP/web/">
这是我的问题。没有它,它对我不起作用。不应该使用app.php。
具体地,
https://localhost/TESTAPP/app.php/hello/ME
返回:
“你好我!”
但
https://localhost/TESTAPP/hello/ME
返回
Object not found!
The requested URL was not found on this server.
If you entered the URL manually please check your
spelling and try again.
If you think this is a server error, please contact
the webmaster.
Error 404
答案 0 :(得分:14)
我知道这是一个愚蠢的问题但是为apache启用了mod_rewrite吗?
如果你的web目录中有.htaccess文件,并且你托管了指向web文件夹的文件,则不需要app.php。
如果你正在运行ubuntu或类似的发行版,你可以这样做:
sudo a2enmod rewrite
sudo service apache2 reload
sudo service apache2 restart
那应该启用mod,并重新加载apache。
编辑:
你回复的回复是在symfony页面吗?如果您的prod缓存可能需要清除,则从应用程序的根目录使用symfony控制台清除缓存:
php app/console cache:clear --env="prod"
编辑:
如果这些都没有用,你可以尝试在htaccess文件中添加RewriteBase:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /TESTAPP
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ app.php [QSA,L]
</IfModule>
答案 1 :(得分:3)
在我的情况下,我需要修改包含AllowOverride None的行以读取AllowOverride All。这告诉Apache,允许.htaccess文件覆盖以前的指令是可以的。您必须在此更改生效(https://help.ubuntu.com/community/EnablingUseOfApacheHtaccessFiles)之前重新加载Apache:
执行此操作: - 转到“/ etc / apache2”修改文件“apache2.conf”部分:
<Directory /var/www/>
Options FollowSymLinks
AllowOverride All
Require all granted
它应该有用。如果它不起作用,你仍然做了一步确保.htaccess被允许覆盖。使用上述说明可以解决许多其他原因。
答案 2 :(得分:0)
将包含项目所在文件夹名称的RewriteBase规则添加到.htaccess文件中就可以了!谢谢!
RewriteBase /project_name