我正在使用以下重写 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 无法在子目录中找到文件?
谢谢!
盖尔