我有一个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而不是相应的地址,这是一个问题。
答案 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="/">