关于mod_rewrite的内容

首先

这是一个备忘录,关于不经常接触服务器的人如何进行Apache HTTP Server的设置。内容适用于Apache 2.4.x和Amazon Linux 2环境。

方程

 

指令清单
https://httpd.apache.org/docs/2.4/mod/directives.html

假设

需要加载rewrite_module。
可以通过httpd -M等命令来进行确认。

Loaded Modules:
 … 略 …
 rewrite_module (shared) 

如果不满足条件,则将以下内容追加到配置文件中。

加载模块重写模块 modules/mod_rewrite.so

在这种情况下,通过在另一个conf文件中添加IncludeOptional指令,可以更容易地进行管理。如果进行了分割,则需要确认是否已加载。
使用httpd -t -DDUMP_CONFIG可以进行确认。

在进行设置后的测试中,IfModule指令非常实用。参考链接:https://httpd.apache.org/docs/2.4/en/mod/core.html#ifmodule

另外,日志输出不能使用RewriteLog和RewriteLogLevel,与2.2版本不同。
在我的环境中,默认值是warn,所以我会将设置提升到最详细的输出。

日志级别为调试(debug),重写为追踪8(rewrite:trace8)。

在以下链接中,记录了有关各级别的详细信息以及如何覆盖特定模块的级别。
https://httpd.apache.org/docs/2.4/zh-cn/mod/core.html#loglevel

若要反映conf文件的变更,请重新启动服务。
sudo systemctl restart httpd.service

写法 (xiě fǎ)

如果没有理由的話,可以直接在conf中进行记录,也可以在htaccess文件中进行设定。在conf的Directory块中和在htaccess中进行记录似乎能够产生相同的效果。在這种情况下,不需要改變AllowOverride。

当指定路径时,请首先确认DocumentRoot指令的指定位置。如果此处不是类似”/var/www/html”的绝对路径,则还需确认ServerRoot。

比如,使用Directory指令括起来的代码块将匹配hoge目录及其子目录下的访问请求,其位于文档根目录的直接下层。

<目录 /hoge>
开启重写引擎
如果请求URI匹配正则表达式^.*/fuga/index\.html$
重写规则为任意内容 https://fuga.com
</目录>

如果在模式部分中使用冒号等标记,需要进行转义。如果多次写入RewriteCond,则默认为AND条件。要更改为OR条件,可以在末尾添加标志,例如:RewriteCond %{REQUEST_URI} ^.*/index.html$ [OR]。

需要注意的是,虽然Location指令也会进行匹配,但由于先应用Directory指令,所以需要注意。

广告
将在 10 秒后关闭
bannerAds