【问题标题】:URL Rewrite and design filesURL 重写和设计文件
【发布时间】:2011-12-31 12:51:09
【问题描述】:

我正在编写一个包含多个类别的门户。

例子:

http://localhost/portal/cats

http://localhost/portal/dogs

当然,这可以通过 URL 重写来实现

这样

RewriteRule ^cats$ /portal/index.php?cat=cats

好的,这样就可以了。

当我尝试访问这样的页面时出现问题

http://localhost/portal/cats/black-cat-22

我的网址重写是:

RewriteRule ^cats/(.*)-([0-9]+)$ /portal/page.php?cat=cats&id=$2

为什么?

因为我所有的 CSS 和图像文件都位于 http://localhost/portal/elements 而不是 http://localhost/portal/cats/elements - 这甚至不是真正的目录。

所以我正在寻找解决方案,如果 URL 包含 /elements/ 它是从 /portal/elements 而不是从任何其他目录读取的,如何进行重写。

如果有什么不清楚的地方,欢迎在下方提问。

干杯,新年快乐。

【问题讨论】:

    标签: php mod-rewrite


    【解决方案1】:

    这就是 html <base> 标记的用武之地 :)

    在 HTML 头部的第一行添加类似这样的内容:

    <base href="http://localhost/portal/" > <!-- or end with /> if XHTML --> 
    

    那么您使用相对 URL 引用的所有内容都将相对于该基础。

    因此您可以使用以下方式引用您的 CSS:

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

    应解析为:http://localhost/portal/elements/stylesheet.css,无论您当前访问的是哪个 URL(例如 portal/catsportal/cats/some-black-cat 等。

    【讨论】:

    • 哇谢谢你uuuuuuuuu:P不知道标签-愚蠢的我:D再次谢谢你,祝你假期愉快。
    • @hakre 你是对的.. 相对链接的开头应该没有斜线。我的错。修好了。
    【解决方案2】:

    当您在 URL 进入您的应用程序时映射它们时,您需要在它们从应用程序“返回”时映射回 URL。

    这可以在您为输出创建 URL 时完成,例如定义您的基本网址并分配本地部分:

    $baseUrl = 'http://localhost/portal/';
    $localUrl = 'elements/image.png';
    $fullUrl = $baseUrl . $localUrl;
    

    或者您有自己的内部 URL 规范,并使用 output filter 全局映射(PHP 这样做的方式)。

    当您使用.htaccess 将 URL 映射到您的应用程序时,也可以使用它来将它们映射回来。这可以通过mod_substituteDocs 轻松完成。

    在您的应用程序中,您使用特殊的 URL sheme,例如称为site://,它将自动替换为您的服务器基本URL http://localhost/portal/.htaccess 代码:

    <Location />
        AddOutputFilterByType SUBSTITUTE text/html
        Substitute s/site:\/\//http://localhost/portal//nq
    </Location>
    

    【讨论】:

    • 是的,我正在考虑这个,但这需要大量的重新编码。因为我只是 include() .html 模板和 url 重写它会更快。
    • @user1102979:我添加了一个示例,展示了输出过滤器如何处理.htaccess 文件。
    • 谢谢,但这个解决方案对我来说太先进了。但我相信有一天它会帮助别人。但是感谢您的努力和新年快乐。
    • 它只显示一般图片,当然。使用基于&lt;base&gt; 的重写,浏览器将为您完成。
    猜你喜欢
    • 1970-01-01
    • 2012-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-12
    相关资源
    最近更新 更多