.htaccess 指令之间的优先级 - 缺少静态资源时返回 404

.htaccess 指令之间的优先级 - 缺少静态资源时返回 404

在 WordPress 安装中,我想立即返回缺少静态资源的 404(没有礼貌页面),但指令似乎冲突。

你能帮助我理解并解决这个问题吗?

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule \.(css|js|html|htm|rtf|rtx|svg|svgz|txt|xsd|xsl|xml|asf|asx|wax|wmv|wmx|avi|bmp|class|divx|doc|docx|exe|gif|gz|gzip|ico|jpg|jpeg|jpe|mdb|mid|midi|mov|qt|mp3|m4a|mp4|m4v|mpeg|mpg|mpe|mpp|odb|odc|odf|odg|odp|ods|odt|ogg|pdf|png|pot|pps|ppt|pptx|ra|ram|swf|tar|tif|tiff|wav|wma|wri|xla|xls|xlsx|xlt|xlw|zip)$ [nocase,redirect=404,last]


<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_METHOD} !POST
RewriteCond %{QUERY_STRING} ^$
RewriteCond %{HTTP:Cookie} !^.*(wordpress_logged_in).*$
RewriteCond %{REQUEST_URI} !^/wp-content/cache/swift-performance/([^/]*)/assetproxy
RewriteCond /home/217146.cloudwaysapps.com/ssytsarbtn/public_html/wp-content/cache/swift-performance/%{HTTP_HOST}%{REQUEST_URI}/desktop/unauthenticated/index.html -f
RewriteRule (.*) wp-content/cache/swift-performance/%{HTTP_HOST}%{REQUEST_URI}/desktop/unauthenticated/index.html [L]
</IfModule>

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

# END WordPress

答案1

RewriteRule \.(css|js|html|htm|...<etc>...|zip)$ [nocase,redirect=404,last]

你缺少了替代上的(第二个)参数RewriteRule。这将最终将请求重写为[nocase,redirect=404,last](无意义的 URL),该 URL 将通过 WordPress 进行路由,最终 WordPress 将生成 404(我假设您在说“礼貌页面”时指的是这个)。

它应采用以下形式:

RewriteRule \.(css|js|html|htm|...<etc>...|zip)$ - [nocase,redirect=404,last]

请注意-,在旗帜(第三个论点)。

更新:当您使用该标志指定非 3xx 状态时R替换字符串无论如何都会被忽略。但是,-(连字符)明确表示“不替换”。来自 Apache 文档

-(破折号)破折号表示不应执行替换(现有路径原封不动地通过)。当需要应用标志(见下文)而不更改路径时使用。

(文档将其称为“破折号”,尽管严格来说它是一种连字符

相关内容