0

我有一个 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 而不是适当的地址,这是一个问题。

4

1 回答 1

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="/">
于 2013-04-11T00:34:33.557 回答