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