我有以下情况我想要嵌套的重写条件,我遇到过一种情况,我无法看到相同的文档。
RewriteCond %{REQUEST_URI} ^(robots.txt|favicon|ico)$ [NC]
RewriteRule . - [S=3]
# Nested ReWrite Condition
RewriteCond %{HTTP_HOST} ^www
RewriteRule .* http://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]
RewriteRule .* http://%{SERVER_NAME}%{REQUEST_URI_1} [R=301,L]
RewriteRule .* http://%{SERVER_NAME}%{REQUEST_URI_2} [R=301,L] # and so on
因此,问题在于跳过规则的数量是否包含嵌套的重写条件,也就是说,在这种情况下,跳过的重写规则的数量是4还是5(如果包括重写条件)。
答案 0 :(得分:2)
RewriteCond %{REQUEST_URI} ^(robots.txt|favicon|ico)$ [NC]
RewriteCond %{HTTP_HOST} !^www
RewriteRule .* - [S=3]
# the following rules are run only if the first 2 conditions don't match
RewriteRule .* http://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]
RewriteRule .* http://%{SERVER_NAME}%{REQUEST_URI_1} [R=301,L]
RewriteRule .* http://%{SERVER_NAME}%{REQUEST_URI_2} [R=301,L]
注意第二个cond中的!
否定
documentation:
这种技术很有用,因为RewriteCond仅适用于 紧随其后的RewriteRule。因此,如果你想做一个 RewriteCond适用于几种RewriteRules,一种可能的技术是 否定这些条件并添加带有[Skip]标志的RewriteRule。
答案 1 :(得分:1)
好的,因为您只发布了一个示例,我向您展示了它的工作原理。这是评论,但如果你仍然没有找到足够的说法,可以提供更多的解释here。
# Does the file exist?
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# Create an if-then-else construct by skipping 3 lines if we meant to
# go to the "else" stanza.
RewriteRule .? - [S=3]
# IF the file exists, then:
RewriteRule (.*\.gif) images.php?$1
RewriteRule (.*\.html) docs.php?$1
# Skip past the "else" stanza.
RewriteRule .? - [S=1]
# ELSE...
Rewri
这应该可以解决您的问题。如果没有,请在问题中更新您的示例,以便明确您缺少的内容。
是的,它会跳过规则而不是条件。