mod_rewrite重定向到CSS文件

时间:2013-02-20 22:53:39

标签: php .htaccess mod-rewrite

我有一个用于清理网址的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;
}

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

2 个答案:

答案 0 :(得分:2)

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

首先,默认情况下,您应该使用以下方法来重写任何引用特定文件或目录的内容:

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

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

# 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

答案 1 :(得分:0)

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

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

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