RewriteRule更改文件的物理路径

时间:2011-04-21 14:53:59

标签: php apache .htaccess mod-rewrite

假设我网站的域名为[http://mywebsite.com] [1]并打开index.php。该脚本从url获取$ page,$ section,$ language变量。所以[http://mywebsite.com/index.php?lang=en&section=home&page=sitemap][2]打开英文的站点地图页面,该页面属于“主页”部分。我希望将相同的网址重写为[http://mywebsite.com/home/sitemap_en.html] [3]。要实现这一点,我已经在.htaccess中添加了以下内容: RewriteCond %{REQUEST_URI} .+\/.+ RewriteRule ^(.+)\/(.+)_(mk|en|al)\.html$ index.php?lang=$3&section=$1&page=$2 [L] 但现在存在一个巨大的问题。当我访问这样的URL时,找不到文件,因为文件style.css位于根文件夹中,而不是[http://mywebsite.com/home/style.css] [4],并且有服务器正在寻找它。 “home”不是真正的文件夹,它不存在,它只是一个部分。所有jpg,png,js,gif等都是如此。如何以我喜欢的方式重定向页面,以及使用真实路径找到的文件?

P.S。某些部分如[http://mywebsite.com/index.php?lang=en&section=contact] [5]根本没有页面。他们应该这样达成:[http://mywebsite.com/contact_en.html] [6] 在上一条规则之后,我有这个:RewriteRule ^(。+)_(mk | en | al).html $ index.php?lang = $ 2& section = $ 1

2 个答案:

答案 0 :(得分:2)

您可以在标题中使用base标记,以便所有相对路径都不在特定的href中:

<head>
    <base href="http://mywebsite.com/" />
</head>

会导致所有相对(不仅仅是css)的网址从根目录下载

OR

正如其他人所说的那样,只需在前面加上一个前导“/”即可使你的路径绝对:

<link rel="stylesheet" href="/css/mycss.css" type="text/css" />

答案 1 :(得分:0)

您是否尝试通过在斜杠前面添加相对于顶级目录(主目录)的css和js文件等的引用?即如果将它们保存在站点主目录中名为样式的目录中:

<link rel=StyleSheet href="/styles/style.css" type="text/css" />