Mod_rewrite不包括子目录

时间:2013-04-10 15:01:50

标签: mod-rewrite

我有一个mod_rewrite(主要是感谢堆栈成员Olaf)重定向 index.php?URL=pages/the-page.php只需the-page。问题是,当请求页面不直接在pages(即pages/sub)时,它会重定向我的.css和.js,这是不好的。

我想要完成的是:

  • 仅重写pages文件夹中的文件,但包含其所有子目录。

重要的是,它永远不会重写files文件夹的URL。

以下是代码:

Options +FollowSymlinks
RewriteEngine on
# prevent endless loop
RewriteCond %{ENV:REDIRECT_STATUS} 200
RewriteRule ^ - [L]

# redirect the client
RewriteCond %{QUERY_STRING} URL=pages/(.+?)\.php
RewriteRule ^index\.php$ /gr/%1? [R,L]

# exclude rewriting all files located in /gr/files
RewriteCond %{REQUEST_URI} !^/gr/files/
# rewrite to real content
RewriteRule ^.*$ /gr/index.php?URL=pages/$0.php [L]

我花了无数个小时与这段代码作斗争。即使是微小的变化也会导致404或500错误。

它还会杀死外部链接使其成为.com / www而不是相应的地址,这是一个问题。

1 个答案:

答案 0 :(得分:1)

你不应该搞乱CSS和脚本的mod_rewrite规则。这听起来像是一个相对的URI问题。将链接更改为绝对URI:

自:

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

为:

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

或“style.css”的绝对路径。

如果您不想更改所有链接,请在页面标题中添加URI基础:

<base href="/">