这个mod_rewrite规则如何导致我的任何文件都无法加载?

时间:2012-08-18 21:10:17

标签: php .htaccess mod-rewrite

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

Options +FollowSymLinks
RewriteEngine On

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

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

编辑:我找到了一个解决方案,但它涉及弄乱我的标记,这不是我想要的。看看下面的答案,你会看到。

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

3 个答案:

答案 0 :(得分: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 /,则请求位于目录/foo/中。因此,将要求以下人员:

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

使用绝对网址

避免这种情况的方法只是在链接/脚本标记中使用绝对网址:

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

这样,无论当前网址如何 - 都会使用链接和脚本标记中的确切网址。

基本标签 - 小心

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

答案 1 :(得分:1)

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

它不仅可以直接为所有文件提供服务,还可以为文件夹执行此操作。如果您要启动一个新的临时项目,或者需要快速测试代码,这非常有用。只需创建一个包含index.php的新目录,服务器就可以正常使用它。

当然,如果没有-d标志,这也会起作用,但你也必须输入整个文件名,这可能会令人困惑。

无论如何,我更愿意只是回答我上面的答案,但是唉。

答案 2 :(得分:1)

经过长时间的搜索,我发现我可以使用:

<base href="/beta/" />

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

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