如何重定向到 Public 中的静态页面死于 Symfony 5 项目
How redirect to a static page in Public dir in a Symfony5 project
我有一个简单的静态网站。
在此基础上,我构建了一个 Symfony 项目,其中包含一个带有 easyadmin-bundle 的管理面板和一个 API,用于在静态页面上使用 ajax 检索数据。
项目结构是这样的:
- bin/
- 配置/
- 迁移/
- public/
- css/
- js/
- index.html
- index.php
- .htaccess
- 源/
- 模板/
一切正常,但我只能在调用时访问该页面:
myfakedomain.com/index.html
页面 myfakedomain.com 返回 404 错误
我想要的是从 myfakedomain.com/ 到 myfakedomain.com/index.html[=57= 的自动重定向]
我认为这可以在 .htaccess 文件中完成。这是 .htaccess 文件的当前内容:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_URI}::[=11=] ^(/.+)/(.*)::$
RewriteRule .* - [E=BASE:%1]
# Sets the HTTP_AUTHORIZATION header removed by Apache
RewriteCond %{HTTP:Authorization} .+
RewriteRule ^ - [E=HTTP_AUTHORIZATION:%0]
RewriteCond %{ENV:REDIRECT_STATUS} =""
RewriteRule ^index\.php(?:/(.*)|$) %{ENV:BASE}/ [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ %{ENV:BASE}/index.php [L]
</IfModule>
这个项目部署在 heroku 所以我创建了一个 Procfile
web: vendor/bin/heroku-php-apache2 public/
可能是从那里来的?
它来自您的 .htacess,它将所有请求重定向到 index.php。
选项 1 - 使用 Apache(我不喜欢这种方法,因为有副作用)
- 从重定向中排除现有文件。
- 将 index.html 声明为默认文件而不是 index.php(调用 .
时
- 小贴士:apache-pack可以帮到你。它包含最新的默认配置
选项 2 - 使用 Symfony(推荐方式):
- 将 index.html 移动到 template/index。html
- 创建一个返回响应呈现模板文件的控制器
# src/Controller/HomeController.php
class HomeController extends AbstractController
{
#[Route(name:'home', '/')]
public function index (): Response
{
return $this->render('index.html');
}
}
我有一个简单的静态网站。 在此基础上,我构建了一个 Symfony 项目,其中包含一个带有 easyadmin-bundle 的管理面板和一个 API,用于在静态页面上使用 ajax 检索数据。
项目结构是这样的:
- bin/
- 配置/
- 迁移/
- public/
- css/
- js/
- index.html
- index.php
- .htaccess
- 源/
- 模板/
一切正常,但我只能在调用时访问该页面:
myfakedomain.com/index.html
页面 myfakedomain.com 返回 404 错误
我想要的是从 myfakedomain.com/ 到 myfakedomain.com/index.html[=57= 的自动重定向]
我认为这可以在 .htaccess 文件中完成。这是 .htaccess 文件的当前内容:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_URI}::[=11=] ^(/.+)/(.*)::$
RewriteRule .* - [E=BASE:%1]
# Sets the HTTP_AUTHORIZATION header removed by Apache
RewriteCond %{HTTP:Authorization} .+
RewriteRule ^ - [E=HTTP_AUTHORIZATION:%0]
RewriteCond %{ENV:REDIRECT_STATUS} =""
RewriteRule ^index\.php(?:/(.*)|$) %{ENV:BASE}/ [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ %{ENV:BASE}/index.php [L]
</IfModule>
这个项目部署在 heroku 所以我创建了一个 Procfile
web: vendor/bin/heroku-php-apache2 public/
可能是从那里来的?
它来自您的 .htacess,它将所有请求重定向到 index.php。
选项 1 - 使用 Apache(我不喜欢这种方法,因为有副作用)
- 从重定向中排除现有文件。
- 将 index.html 声明为默认文件而不是 index.php(调用 . 时
- 小贴士:apache-pack可以帮到你。它包含最新的默认配置
选项 2 - 使用 Symfony(推荐方式):
- 将 index.html 移动到 template/index。html
- 创建一个返回响应呈现模板文件的控制器
# src/Controller/HomeController.php
class HomeController extends AbstractController
{
#[Route(name:'home', '/')]
public function index (): Response
{
return $this->render('index.html');
}
}