【问题标题】:RewriteRule changes physical paths for filesRewriteRule 更改文件的物理路径
【发布时间】:2011-04-21 14:53:58
【问题描述】:

假设我的网站的域是 [http://mywebsite.com][1] 并且打开 index.php。该脚本从 url 获取 $page,$section,$language 变量。因此 [http://mywebsite.com/index.php?lang=en&section=home&page=sitemap][2] 打开属于“主页”部分的英文站点地图页面。我希望将相同的 url 重写为 [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] 但是现在有一个很大的问题。当我访问这样的一些网址时,找不到文件,因为文件 style.css 在根文件夹中而不是在 [http://mywebsite.com/home/style.css][4] 中,并且服务器在那里正在寻找它。 “home”不是真正的文件夹,它不存在,它只是一个部分。所有的 jpg、png、js、gif 等也是如此。如何以我喜欢的方式重定向页面,以及使用真实路径找到的文件?

附言像 [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

【问题讨论】:

    标签: php apache .htaccess mod-rewrite


    【解决方案1】:

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

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

    会导致所有相对(不仅仅是css)URL从你的根目录中加载

    正如其他人所说,只需在前面放置一个前导“/”即可使您的路径成为绝对路径:

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

    【讨论】:

    • 非常感谢您的回答,我什至根本不知道基本标签的存在。现在我不必编辑所有的href,它们很多:)
    【解决方案2】:

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

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

    【讨论】:

    • 嘿,我不敢相信这是多么明显:) 我所有的 src 和 href 都像 href="images/design/favicon.ico" 而当我在前面加上斜杠时,就像 href="/images /design/favicon.ico" 他们加载得很好,DUH :) 非常感谢兄弟。我认为这会解决我所有的问题,希望不会出现新问题。
    猜你喜欢
    • 1970-01-01
    • 2013-09-19
    • 1970-01-01
    • 2016-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-04
    相关资源
    最近更新 更多