Mod_rewrite会覆盖页面中的所有链接

时间:2012-09-17 22:46:24

标签: url mod-rewrite hyperlink

我正在使用以下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。我在这做错了什么。请帮忙。

1 个答案:

答案 0 :(得分:0)

  

此重写规则在每个链接上添加子域。例如。如果到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]