在 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 文档:
-
(破折号)破折号表示不应执行替换(现有路径原封不动地通过)。当需要应用标志(见下文)而不更改路径时使用。
(文档将其称为“破折号”,尽管严格来说它是一种连字符。