<IfModule mod_rewrite.c> 中的 RewriteEngine 每次都打开?

Posted

技术标签:

【中文标题】<IfModule mod_rewrite.c> 中的 RewriteEngine 每次都打开?【英文标题】:RewriteEngine On in <IfModule mod_rewrite.c> every time? 【发布时间】:2013-07-12 06:19:16 【问题描述】:

我想知道当 RewriteEngine On 嵌入到 IfModule mod_rewrite.c 时,我是否只能在我的 htaccess 中使用一次,还是每次都必须使用它因为它被嵌入? p>

请参见下面的示例。谢谢

<ifModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %QUERY_STRING /?author   [NC]
RewriteRule .* - [F]
</ifModule>

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %QUERY_STRING g=  [NC]
RewriteRule ^(.*)$ - [F,L]
</IfModule>

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %REQUEST_FILENAME !-f
RewriteCond %REQUEST_FILENAME !-d
RewriteRule . /index.php [L]
</IfModule>

【问题讨论】:

您还应该避免使用多个RewriteBase 指令。虽然它不会产生错误,但在任何一个 .htaccess 文件中包含多个是无效的。最后一个获胜并控制整个 .htaccess 文件。在这个文件中,无论如何它看起来是不必要的 - AFAIK 只有在 RewriteRule 指令中有相对路径替换时才需要它。 【参考方案1】:

您应该能够对所有重写代码进行一次检查。

我从您的代码中怀疑您正在处理的网站将无法正常运行,或者根本没有启用 mod_rewrite。在这种情况下,我会完全省略对 mod_rewrite 的检查,如果未启用则让网络服务器失败。

如果您最终遇到您的代码安装在未启用 mod_rewrite 的网络服务器上的情况,那么调试和查明确切问题会容易得多。

【讨论】:

以上是关于<IfModule mod_rewrite.c> 中的 RewriteEngine 每次都打开?的主要内容,如果未能解决你的问题,请参考以下文章

Apache如何开启Mod_rewrite模块以及PHPWind伪静态(全伪)

httpd之域名301跳转

thinkphp怎么隐藏index.php

防盗链设置

yii 1.1.*伪静态配置

apache rewrite功能