2

以下 mod_rewrite 规则导致我的网站表现得很奇怪,我键入 localhost/signin/。

Options +FollowSymLinks
RewriteEngine On

RewriteRule ^signin/?$ access.php [NC,L]

它会导致所有带有相关链接的附加文件(图像、css、php、js)无法加载?但是,当我键入 localhost/signin 时,所有带有负载的附加文件都没有错。我认为发生这种情况是因为 /signin/ 被视为一个目录,并且所有相关链接都将查看所有附加文件的不存在目录。

编辑:我想出了一个解决方案,但它涉及混淆我的标记,这不是我想要的。看看我下面的答案,你会明白的。

但是,我希望重写规则忽略这些附加文件。

4

3 回答 3

4

问题

您遇到的问题是(澄清后)与使用重写规则无关。请编辑您的问题以准确表示您的问题。

几乎可以肯定,因为您有以下参考资料:

<link rel="stylesheet" type="text/css" href="css/foo.css">
<script src="js/foo.js">

这意味着用于查找 css/js 文件的路由取决于当前请求的目录(虚拟或真实)。

如果当前请求是 /foo,则请求在根目录中。因此,将请求以下网址:

/css/foo.css
/js/foo.js

但是,如果当前请求是 /foo/,则该请求位于 dir 中/foo/。因此,将要求以下 urs:

/foo/css/foo.css
/foo/js/foo.js

使用绝对网址

避免这种情况的方法就是在链接/脚本标签中使用绝对 url:

<link rel="stylesheet" type="text/css" href="/css/foo.css">
<script src="/js/foo.js">

这样,无论当前的 url 是什么 - 使用链接和脚本标记中的确切 url。

基础标签 - 小心

正如您在自己的答案中所指出的那样,您可以使用基本标签 - 但更明显的是不依赖它。某些浏览器也存在问题,例如将“#”转换为对“/#”的请求,这是忽略基本标记存在的另一个原因。

于 2012-08-18T21:46:26.960 回答
1

经过足够长的搜索后,我发现我可以使用:

<base href="/beta/" />

在每个 HTML 文件的 head 部分中以修复相对路径。我不太关心这种方法,因为它弄乱了我的标记。如果其他人有想法,请与我分享。

顺便说一句,我在 Macbook Pro 上使用 MAMP Pro。

于 2012-08-19T03:20:26.777 回答
1

由于我没有足够的代表来支持正确的答案,所以这里是:暴风雨天气的答案是一件非常好的事情。

它不仅会直接提供所有文件,还会对文件夹执行此操作。如果您正在开始一个新的临时项目,或者需要快速输出一些测试代码,这将非常有用。只需在其中创建一个带有 index.php 的新目录,服务器就会很好地为它提供服务。

当然,如果没有 -d 标志,这也可以,但是您也必须输入整个文件名,这可能会很混乱。

无论如何,我宁愿只支持我上面的答案,但是唉。

于 2012-08-18T22:00:00.307 回答