0

我有一个用于清理 URL 的 mod_rewrite 规则:

RewriteRule ^tshirts*$ /thsirt.php

这个想法是访问myurl.com/tshirtmyurl.com/tshirts应该重定向到myurl.com/tshirt.php.

访问myurl.com/tshirt正确显示tshirt.php,直到我添加了一个外部样式表链接tshirt.php- 现在它实际上重定向到 CSS 文件,所以我留下了 CSS 文件的原始源 ( tshirt.css)。

更令人困惑的是,如果我导航到myurl.com/tshirts,它会抛出 404。

来源tshirt.php

<html>
<head>
    <title>Page title</title>
    <link rel="stylesheet" type="text/css" href="/tshirt.css" />
</head>
<body>
    <h1>Hello, world.</h1>
</body>
</html>

来源tshirt.css

body{
    background-color: #4F5557;
}

知道可能导致此问题的原因或如何解决吗?

4

2 回答 2

2

最好的解决方案是覆盖你所有的基础,基本上确保你只重写你需要的,而不是不应该的。

首先,默认情况下,您应该注意不要重写任何引用特定文件或目录的内容,使用:

# Do Not apply if a specific file or folder exists
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

添加以下 Next 还允许您指定某些目录以忽略规则,这些目录可能用于其他目的,例如调用脚本或要外部链接的资源。

# Do Not apply if refering to a resource in one of these folders
RewriteCond %{REQUEST_URI} "/admin/" [OR]
RewriteCond %{REQUEST_URI} "/scripts/" [OR]
RewriteCond %{REQUEST_URI} "/external/"
RewriteRule (.*) $1 [L]

最后,你可以有你的规则

RewriteRule ^tshirts*$ /tshirt.php
于 2013-02-20T23:13:10.587 回答
0

通常,您不希望重写任何现有文件或目录的 url,因此在您的规则之前添加 2 个条件:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^tshirts*$ /thsirt.php

不同类型资源的清晰文件夹结构也有助于保持项目的可管理性。

于 2013-02-20T22:59:01.523 回答