mod-rewrite 规则对于子目录中的文件无法正常工作

mod-rewrite 规则对于子目录中的文件无法正常工作

我正在使用以下重写 URL 来获得更漂亮的 URL:

RewriteRule (\d+)/(.+) $2?companyId=$1  [NC,L,B,QSA,NE]

例如,url/invoices.php?companyId=123可以表示为/123/invoices.php。我测试过,效果很好。

问题是我的某些 php 文件通过相对 URL 引用了图像和 javascript,例如js/jquery.js。我以为这些文件也会被我的重写 URL 覆盖,这个 URL 很通用,但显然它没有,而是返回了 404。

示例:/123/js/jquery.js在浏览器中访问会返回 404 错误:The requested URL /js/jquery.js was not found on this server.请注意错误消息如何引用已被重写为正确文件名的文件名。如果我将错误消息中的 URL 复制粘贴到浏览器的 URL 字段中(省略重写规则),它会返回该文件!

php 文件(可以工作)和我的图像/javascript 文件之间的唯一区别是后者位于子目录中而不是根级别。

将我的 php 文件放在/test子文件夹中会产生同样的问题,例如:

/35/test/invoices.php=>The requested URL /test/invoices.php was not found on this server.

同样,mod_rewrite 已按预期更改路径,但 apache 无法找到该文件。直接访问它可以正常工作。

由于 JavaScript 和图像不需要 companyId 参数,因此使用绝对路径可以轻松解决这些问题。但是,以后我可能想将我的 php 文件组织在子目录中,所以我现在需要解决这个问题。

有谁知道为什么当路径经过重写模块后,apache 无法在子目录中找到文件?

谢谢!

盖尔

相关内容