【问题标题】:Mod_rewrite overwrites all link in the pagemod_rewrite 覆盖页面中的所有链接
【发布时间】:2012-09-17 22:46:23
【问题描述】:

我正在使用以下 mod_rewrite 规则:

  **RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI}.php -f
    RewriteRule ^(.*)$ $1.php [L]**

获取干净的网址,例如

  www.myweb.com/login

来自

 www.myweb.com/login.php

我正在使用另一个重写规则

**RewriteRule ^itemdetail/([0-9]+)/?$ itemdetail.php?itemid=$1 [NC,L]**

得到

 www.myweb.com/itemdetail/100008

来自

 www.myweb.com/itemdetail?itemid=100008.

这工作正常,但有一个问题。此重写规则在每个链接上添加一个子域。例如。如果到 css 文件的链接是 text.css 现在到这个 css 文件的链接是 itemdetail/text.css。主页链接现在是 www.myweb.com/itemdetail/home 而不是 www.myweb.com/home。我在这里做错了什么。请帮忙。

【问题讨论】:

    标签: url mod-rewrite hyperlink


    【解决方案1】:

    此重写规则在每个链接上添加一个子域。例如。如果到 css 文件的链接是 text.css 现在到这个 css 文件的链接是 itemdetail/text.css。主页链接现在是 www.myweb.com/itemdetail/home 而不是 www.myweb.com/home。我在这里做错了什么。

    您可以采取以下两种方式之一来解决此问题,或者将其添加到您的 itemdetail.php 页面的标题中(在 <head> </head> 标记内):

    <base href="/">
    

    或者您可以通过添加前导 / 将您的 css 链接从相对 URL 更改为绝对 URL,例如:

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

    否则,您可以尝试添加重写规则来取消写入 css 链接,但这通常是一个非常糟糕的主意,因为当您有意使用子目录时,它会破坏 css:

    RewriteRule ^itemdetail/(.*?)\.css$ /$1.css [L]
    

    【讨论】:

    • IE 是否支持 ?
    • @Hari 存在涉及&lt;base&gt; 标签和不同版本 IE 的特殊错误:stackoverflow.com/a/8973975/851273 另外我认为旧版本的 IE(可能是 6 个?)可能根本不支持它。跨度>
    • 谢谢。显然 IE 需要整个 href 而不仅仅是“/”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-17
    • 1970-01-01
    • 2014-08-13
    • 1970-01-01
    • 2017-08-18
    • 1970-01-01
    • 2022-12-22
    相关资源
    最近更新 更多