mod-rewrite - mod_rewrite 在 before 语句上不能与 RewriteEngine 一起使用
问题描述
我继承了具有以下 .htaccess RewriteRules 的 Web 应用程序
Options FollowSymLinks
RewriteRule .* - [E=CAMPAIGN_MODE:live]
RewriteEngine on
RewriteCond "%{ENV:CAMPAIGN_MODE}" "^live"
RewriteRule ^r/([A-Za-z]{2})/([A-Za-z0-9_]+)$ ?action=saveReferral&code=$2&lang=$1
RewriteRule ^crossfit(/.*)?$ /?lang=cf [R=301,L,QSA]
RewriteRule ^classic(/.*)?$ /?lang=en [R=301,L,QSA]
RewriteCond "%{ENV:CAMPAIGN_MODE}" "^offline"
RewriteCond %{REQUEST_URI} !^/admin/
RewriteCond %{REQUEST_URI} !^/dashboard/
RewriteCond %{REQUEST_URI} !^/includes/
RewriteCond %{REQUEST_URI} !^/images/
RewriteCond %{REQUEST_URI} !^/styles/
RewriteRule ^(.*)$ https://www.somewebsite.com/en-gb/ [R=301]
第一个 RewriteRule 旨在将所有请求重写为 index.php 文件,但自然不应该将请求重写为磁盘上的文件。
上面的 .htaccess 按预期工作 - 直到我将 RewriteEngine 移到所有语句的前面。然后,每个请求都被重写为 index.php,甚至包括磁盘上的文件。
我的问题是:为什么上面的 .htaccess 完全可以与 RewriteEngine 语句在那个位置工作?
解决方案
推荐阅读
- r - 通过从另一列中获取值来替换一列中的值
- .net - 带有 Realm 数据库 .NET sdk 的字符串数组
- double - Idris,通过去掉小数点将 Double 转换为 Nat(下限)
- javascript - 我想使用 TextInput 标签为 mime 类型添加验证
- python - 简化循环的 np.tensordot 表达式
- d3.js - 使用 d3.js 创建的 cypress 图形进行测试
- python - 在 Ubuntu 20.04 的 Python 中解析 () 中的值 psutil.sensors_temperatures()
- react-native - 为返回数据的 Windows 扫描 wifi 设备反应本机
- python - 我的 Crypto 无法正常工作,它一直在重置
- python - Open CV 光流断言失败错误