.htaccess 子文件夹内的Symfony4路由
我的.htaccess 子文件夹内的Symfony4路由,.htaccess,symfony,mod-rewrite,.htaccess,Symfony,Mod Rewrite,我的/var/www/html/app/中有一个symfony应用程序,我想通过主机/app/访问它,但我无法让它工作 I have a conf file with this <Directory /var/www/html/app> AllowOverride All Order Allow,Deny Allow from All <IfModule mod_rewrite.c> Options -MultiV
/var/www/html/app/
中有一个symfony应用程序,我想通过主机/app/
访问它,但我无法让它工作
I have a conf file with this
<Directory /var/www/html/app>
AllowOverride All
Order Allow,Deny
Allow from All
<IfModule mod_rewrite.c>
Options -MultiViews
RewriteEngine On
# RewriteCond %{REQUEST_FILENAME} !-f
# RewriteCond %{REQUEST_FILENAME} !-d
# RewriteRule ^(.*)$ public/$1 [L]
</IfModule>
</Directory>
使用这个.htaccess,当我转到://host/app
时,我转到symfony应用程序(而不是apache目录结构),这似乎是一个好的开始。
但问题是我遇到了一个异常,没有找到/app/
的路由。
这很正常,因为/app/
是我的服务器中的子文件夹,而不是symfony路由的开始
如何使symfony路由从/app/
文件夹路径之后开始
我知道在子文件夹中有一些关于symfony2/3路由的问题,但是答案需要将src
和public
文件分开,这不是我想要的
我只希望我的路由在访问://主机/app
时工作
关于信息,当我访问://host/app/public/*Symfony routes*
编辑:
新建app.conf
别名/rapp”/var/www/html/app/public“
不允许超限
命令允许,拒绝
通融
选项-多视图
重新启动发动机
#重写库/应用程序
重写cond%{REQUEST_FILENAME}-F
重写cond%{REQUEST_FILENAME}-D
重写规则^(?!public/index.php)$public/index.php$1[L]
问题在于web服务器的文档根目录(apache将通过url公开的目录)和项目的文档根目录(公共目录)不相同。相反,您的服务器指向项目目录。这就是为什么您必须通过向url添加public/
来手动进入项目的文档根目录
您应该避免使项目目录可访问,因为这可能会暴露您的配置,从而使您的网站易受攻击,例如,通过配置中的凭据允许用户访问您的数据库
您可以通过将项目存储在其他地方,然后只将项目的公共目录符号链接到/var/www/html/app
来实现目标。这可能需要对apache配置进行一些更改,例如在ymlinks之后添加选项
另一种更复杂的方法是使用mod\u代理
。配置大致如下所示:
# Your public server reachable from the outside
<VirtualHost *:80>
ProxyPass /app http://127.0.0.1:8080/
</VirtualHost>
# Your internal server where the requests are proxied to
<VirtualHost 127.0.0.1:8080>
<Directory /var/www/html/app/public>
AllowOverride All
Order Allow,Deny
Allow from All
</Directory>
...
</VirtualHost>
问题在于web服务器的文档根(apache将通过url公开的目录)和项目的文档根(公共目录)不相同。相反,您的服务器指向项目目录。这就是为什么您必须通过向url添加public/
来手动进入项目的文档根目录
您应该避免使项目目录可访问,因为这可能会暴露您的配置,从而使您的网站易受攻击,例如,通过配置中的凭据允许用户访问您的数据库
您可以通过将项目存储在其他地方,然后只将项目的公共目录符号链接到/var/www/html/app
来实现目标。这可能需要对apache配置进行一些更改,例如在ymlinks
之后添加选项
另一种更复杂的方法是使用mod\u代理
。配置大致如下所示:
# Your public server reachable from the outside
<VirtualHost *:80>
ProxyPass /app http://127.0.0.1:8080/
</VirtualHost>
# Your internal server where the requests are proxied to
<VirtualHost 127.0.0.1:8080>
<Directory /var/www/html/app/public>
AllowOverride All
Order Allow,Deny
Allow from All
</Directory>
...
</VirtualHost>
我设法解决了这个问题
虽然我不确定配置是否“正确”,但它似乎可以工作
这是我的工作app.conf
文件(在/etc/apache2/sties enabled/app.conf
中)
Alias/app”/var/www/html/app/public”
不允许超限
命令允许,拒绝
通融
选项-多视图
重新启动发动机
重写规则(/public)-[L]
重写cond%{REQUEST_FILENAME}-F
重写cond%{REQUEST_FILENAME}-D
重写规则^(.*)$index.php/$1[L]
第一个RewriteRule
是在我将url(如example.com/app/page-1
重写到example.com/app/public/index.php/page-1
时防止内部重写循环。
由于page-1
不是一个目录或文件,它将无限循环。
所以我假设只要我有一个/public
部分,重写就开始了,我们什么也不做就停止重写,并用[L]
标志结束重写
我不明白为什么我必须删除“final”RewriteRule
(RewriteRule^(.*)$index.php/$1[L]
)中的public/
部分
如果有人有改进此配置的想法,请随时发表评论。我设法解决了问题
虽然我不确定配置是否“正确”,但它似乎可以工作
这是我的工作app.conf
文件(在/etc/apache2/sties enabled/app.conf
中)
Alias/app”/var/www/html/app/public”
不允许超限
命令允许,拒绝
通融
选项-多视图
重新启动发动机
重写规则(/public)-[L]
重写cond%{REQUEST_FILENAME}-F
重写cond%{REQUEST_FILENAME}-D
重写规则^(.*)$index.php/$1[L]
第一个RewriteRule
是在我将url(如example.com/app/page-1
重写到example.com/app/public/index.php/page-1
时防止内部重写循环。
由于page-1
不是一个目录或文件,它将无限循环。
所以我假设只要我有一个/public
部分,重写就开始了,我们什么也不做就停止重写,并用[L]
标志结束重写
我不明白为什么我必须删除“final”RewriteRule
(RewriteRule^(.*)$index.php/$1[L]
)中的public/
部分
如果有人有改进此配置的想法,请随时发表评论。我试图添加别名
# Your public server reachable from the outside
<VirtualHost *:80>
ProxyPass /app http://127.0.0.1:8080/
</VirtualHost>
# Your internal server where the requests are proxied to
<VirtualHost 127.0.0.1:8080>
<Directory /var/www/html/app/public>
AllowOverride All
Order Allow,Deny
Allow from All
</Directory>
...
</VirtualHost>
Alias /app /var/www/html/app/public
Alias /app "/var/www/html/app/public"
<Directory /var/www/html/app>
AllowOverride None
Order Allow,Deny
Allow from All
<IfModule mod_rewrite.c>
Options -MultiViews
RewriteEngine On
RewriteRule (/public) - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
</IfModule>
</Directory>