这是关于Apache的mod_rewrite 的规范性问题。 更改请求URL或将用户重定向到与他们最初请求的URL不同的URL是使用mod_rewrite完成的。这包括诸如: 将HTTP更改为HTTPS(或其他方式) 将请求更改为不存在的页面以替换新的替换。 修改URL格式(例如?id = 3433到/ id / 3433) 基于推荐人基于浏览器呈现不同的页面,基于月球和太阳下的任何可能情况。 任何你想要搞乱URL的东西 你曾经想知道的关于Mod_Rewrite规则的所有内容,但都不敢问! 我怎样才能成为编写mod_rewrite规则的专家? mod_rewrite规则的基本格式和结构是什么? 我需要掌握哪些正则表达式的形式/风格? 编写重写规则时最常见的错误/陷阱是什么? 什么是测试和验证mod_rewrite规则的好方法? 是否有我应该知道的mod_rewrite规则的SEO或性能影响? 有没有常见的情况下mod_rewrite可能看起来像工作的正确工具,但不是? 什么是常见的例子? 一个地方来测试你的规则 该htaccess的测试网站是玩弄你的规则,并测试他们的好地方。它甚至显示调试输出,所以你可以看到什么匹配,什么没有。 答案 mod_rewrite语法顺序 mod_rewrite有一些影响处理的特定排序规则。在任何事情完成之前,RewriteEngine On需要给出指令,因为这会启用mod_rewrite处理。这应该在任何其他重写指令之前。 RewriteCond前面RewriteRule使得一条规则受制于条件。以下任何RewriteRules将被处理,就好像它们不受条件限制。 RewriteEngine On RewriteCond %{HTTP_REFERER} ^https?://serverfault\.com(/|$) RewriteRule $/blog/(.*)\.html $/blog/$1.sf.html 在这种简单的情况下,如果HTTP引用来自serverfault.com,则将博客请求重定向到特殊的服务器默认页面(我们只是特别的)。但是,如果上面的块有一个额外的RewriteRule行: RewriteEngine On RewriteCond %{HTTP_REFERER} ^https?://serverfault\.com(/|$) RewriteRule $/blog/(.*)\.html $/blog/$1.sf.html RewriteRule $/blog/(.*)\.jpg $/blog/$1.sf.jpg 所有的.jpg文件都会转到特殊的服务器默认页面,而不仅仅是那些带有指示来自这里的引用链接的页面。这显然不是这些规则如何编写的意图。它可以用多个RewriteCond规则完成: RewriteEngine On RewriteCond %{HTTP_REFERER} ^https?://serverfault\.com(/|$) RewriteRule