1

我的项目(Silex)有一个前端控制器web/index.php和资产web/css/*web/img/*等等。我已将以下.htaccess文件放在公共 html 文件夹的根目录中:

<IfModule mod_rewrite.c>
    Options -MultiViews

    RewriteEngine On
    RewriteBase web
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [QSA,L]
</IfModule>

每个请求都应该被重写到 web 文件夹(RewriteBase web指令),如果文件不存在(!-f)它应该被路由到前端控制器。

这不起作用:

<img src="/img/myimage.png" alt="" />

文件myimage.png存在,但请求/img/myimage.png给了我一个 404 文件夹。如果我修改它的路径/web/img/mmyimage.png就可以了。

有什么我想念的吗?

4

5 回答 5

0

I managed to fix it with these lines:

<IfModule mod_rewrite.c>
    Options -MultiViews

    RewriteEngine On

    RewriteCond %{DOCUMENT_ROOT}/web/$1 -f
    RewriteRule ^(.+?)/?$ /web/$1 [L]

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ web/index.php [QSA,L]
</IfModule>
于 2015-01-15T19:40:41.273 回答
0

正如 Kyra 所说,您需要将 web 更改为 /web。

选项 - 多视图

RewriteEngine On
RewriteBase /web
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [QSA,L]

但这并不能解决您的问题。

主要问题是您的 DocumentRoot 指向 /path/to/project 并且它应该指向 /path/to/project/web

于 2014-01-18T03:06:29.457 回答
0

用以下代码替换您的 .htaccess:

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

## If the request is for a valid directory
RewriteCond %{REQUEST_FILENAME} -d [OR]
## If the request is for a valid file
RewriteCond %{REQUEST_FILENAME} -f [OR]
## If the request is for a valid link
RewriteCond %{REQUEST_FILENAME} -l
## don't do anything
RewriteRule ^ - [L]

# if requested files exists in /web then forward it there
RewriteCond %{DOCUMENT_ROOT}/web/$1 -f
RewriteRule ^(.+?)/?$ /web/$1 [L]

# if requested files doesn't exist in /web then forward it to index.php
RewriteCond %{DOCUMENT_ROOT}/web/$1 !-f
RewriteRule ^(.+?)/?$ /web/index.php [L]
于 2013-09-19T09:54:04.690 回答
0

您可以尝试明确路由 css 和 img 文件夹:

RewriteCond %{DOCUMENT_ROOT}/web%{REQUEST_URI} -f
RewriteRule ^(css|img) /web%{REQUEST_URI} [L]

您需要在 index.php 路由规则的条件之前添加它。

于 2013-09-19T09:12:25.553 回答
0

如果您的服务器正在运行 Apache >= 2.2.16,您可以使用:

FallbackResource /index.php

在你的 .htaccess 而不是

<IfModule mod_rewrite.c>
    Options -MultiViews

    RewriteEngine On
    RewriteBase web
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [QSA,L]
</IfModule>

另请参阅Apache 的 fallbackresource:您的新 .htaccess 命令以获取更多信息。

于 2013-09-19T11:34:36.300 回答