.htaccess Apache RewriteRule:错误的标志分隔符“FilesMatch”

axr492tv  于 2023-03-23  发布在  Apache
关注(0)|答案(1)|浏览(145)

这是我的.htaccess文件在头部

<FilesMatch "\.pdf$">
    RewriteRule ([^/]+)\.pdf $ - [E=FILENAME:$1]
    <If "%{REQUEST_URI} =~ m#^/wp-content/themes/my_theme/pdf/fr/.*#">
        Header add Link '<https://www.example.com/wp-content/my_theme/theme_SES/pdf/fr/%{FILENAME}e>; rel="canonical"'
    </If>
</FilesMatch>

我在error.log中收到以下错误:

RewriteRule: bad flag delimiters

.htaccess文件有什么问题?

dgenwo3n

dgenwo3n1#

RewriteRule ([^/]+)\.pdf $ - [E=FILENAME:$1]
------------------------^

$之前有一个错误的 * 空格 *。因此-被视为 flags(第三个)参数,因此出现错误。
应该这样写:

RewriteRule ([^/]+)\.pdf$ - [E=FILENAME:$1]
  • 旁白:* 在这种情况下,你应该没问题,但请注意文档中的以下警告:

虽然重写规则在语法上允许出现在<Location><Files>节(包括其正则表达式对应部分)中,但这绝不是必需的,也不受支持。在这些上下文中可能会中断的功能是相对替换。
例如,您的代码块可以更简单地重写为:

RewriteRule ^wp-content/themes/my_theme/pdf/fr/(?:.+/)?([^/]+)\.pdf$ - [E=FILENAME:$1]
Header add Link '<https://www.example.com/wp-content/my_theme/theme_SES/pdf/fr/%{FILENAME}e>; rel="canonical"' env=FILENAME

这也许可以进一步简化了解您的实际URL结构。
并且,根据您的其他指令,您可能需要将Header指令中的FILENAME更改为REDIRECT_FILENAME。(取决于重写引擎是否有循环-如果使用标准WordPress指令,通常会有。)
请注意,Header指令上添加了env=FILENAME参数,它根据是否设置了FILENAME env var来有条件地设置此头文件。

相关问题