https://redmine.lighttpd.net/https://redmine.lighttpd.net/favicon.ico?13667327412009-10-18T15:32:02Zlighty labsLighttpd - Feature #2085: null redirects for mod_redirecthttps://redmine.lighttpd.net/issues/2085?journal_id=64892009-10-18T15:32:02Zqqqqq
<ul><li><strong>Target version</strong> set to <i>1.4.x</i></li></ul> Lighttpd - Feature #2085: null redirects for mod_redirecthttps://redmine.lighttpd.net/issues/2085?journal_id=64902009-10-18T15:32:39Zqqqqq
<ul><li><strong>Target version</strong> deleted (<del><i>1.4.x</i></del>)</li></ul> Lighttpd - Feature #2085: null redirects for mod_redirecthttps://redmine.lighttpd.net/issues/2085?journal_id=92092016-03-29T04:29:59Zgstrauss
<ul></ul><p>Trivial patch, but the question is whether it should be done or not. Also, should something similar be done in mod_rewrite?</p> Lighttpd - Feature #2085: null redirects for mod_redirecthttps://redmine.lighttpd.net/issues/2085?journal_id=92692016-03-30T22:58:48Zgstrauss
<ul></ul><p>mod_rewrite documents:<br /><a class="external" href="https://redmine.lighttpd.net/projects/lighttpd/wiki/docs_modrewrite">https://redmine.lighttpd.net/projects/lighttpd/wiki/docs_modrewrite</a></p>
<blockquote>
<p>However, mod_rewrite provides a mechanism to pass URLs through unmangled: specify "$0" as the rule target.</p>
</blockquote> Lighttpd - Feature #2085: null redirects for mod_redirecthttps://redmine.lighttpd.net/issues/2085?journal_id=92702016-03-30T23:42:05Zgstrauss
<ul><li><strong>Status</strong> changed from <i>New</i> to <i>Patch Pending</i></li><li><strong>Target version</strong> set to <i>1.4.40</i></li></ul><p>@qqqqq's one-line patch provides a "match and no-op" feature to mod_redirect which short-circuits and does not match further redirect rules.</p>
<p>While a $HTTP["url"] condition with a negative match could be used to avoid applying a set of generic redirect rules, the admin would have to collect all those exception paths into a single condition, or else would have to repeat redirect rules.</p>
<p>The "match and no-op" solution provides a more convenient short-circuit to ignore further redirect rules.</p> Lighttpd - Feature #2085: null redirects for mod_redirecthttps://redmine.lighttpd.net/issues/2085?journal_id=93952016-04-14T10:40:14Zgstrauss
<ul></ul><p>Updated patch to match target pattern against "$0" and short-circuit since it is 'identity' pattern, similar to mod_rewrite.</p>
<pre>
diff --git a/src/mod_redirect.c b/src/mod_redirect.c
index 5e99dcb..d79403e 100644
--- a/src/mod_redirect.c
+++ b/src/mod_redirect.c
@@ -209,6 +209,10 @@ static handler_t mod_redirect_uri_handler(server *srv, connection *con, void *p_
"execution error while matching: ", n);
return HANDLER_ERROR;
}
+ } else if (2 == pattern_len && pattern[0] == '$' && pattern[1] == '0') {
+ /* short-circuit if "$0" replacement pattern (identity)
+ * (do not attempt to match against remaining redirect rules) */
+ return HANDLER_GO_ON;
} else {
const char **list;
size_t start;
</pre> Lighttpd - Feature #2085: null redirects for mod_redirecthttps://redmine.lighttpd.net/issues/2085?journal_id=93962016-04-14T11:02:17Zstbuehler
<ul></ul><p>gstrauss wrote:</p>
<blockquote>
<p>mod_rewrite documents:<br /><a class="external" href="https://redmine.lighttpd.net/projects/lighttpd/wiki/docs_modrewrite">https://redmine.lighttpd.net/projects/lighttpd/wiki/docs_modrewrite</a></p>
<blockquote>
<p>However, mod_rewrite provides a mechanism to pass URLs through unmangled: specify "$0" as the rule target.</p>
</blockquote></blockquote>
<p>That is actually not true (don't know who wrote that piece): "$0" is the complete match, but if you didn't match the complete input, it doesn't return the "unmangled" input.</p> Lighttpd - Feature #2085: null redirects for mod_redirecthttps://redmine.lighttpd.net/issues/2085?journal_id=93972016-04-14T11:16:33Zgstrauss
<ul></ul><p>Does that mean you would prefer the solution originally presented, which is a blank target pattern?</p> Lighttpd - Feature #2085: null redirects for mod_redirecthttps://redmine.lighttpd.net/issues/2085?journal_id=93982016-04-14T11:59:46Zstbuehler
<ul></ul><p>A blank target doesn't have any sane semantic so far, so I see no problem using it for a special purpose. Maybe the same pattern could then also be applied to mod_rewrite for consistency.</p> Lighttpd - Feature #2085: null redirects for mod_redirecthttps://redmine.lighttpd.net/issues/2085?journal_id=93992016-04-14T12:11:48Zgstrauss
<ul></ul><p>Thanks.<br />Simple modification to the patch. I'll look at mod_rewrite next.</p>
<pre>
diff --git a/src/mod_redirect.c b/src/mod_redirect.c
index 5e99dcb..d79403e 100644
--- a/src/mod_redirect.c
+++ b/src/mod_redirect.c
@@ -209,6 +209,10 @@ static handler_t mod_redirect_uri_handler(server *srv, connection *con, void *p_
"execution error while matching: ", n);
return HANDLER_ERROR;
}
+ } else if (0 == pattern_len) {
+ /* short-circuit if blank replacement pattern
+ * (do not attempt to match against remaining redirect rules) */
+ return HANDLER_GO_ON;
} else {
const char **list;
size_t start;
</pre> Lighttpd - Feature #2085: null redirects for mod_redirecthttps://redmine.lighttpd.net/issues/2085?journal_id=94002016-04-14T12:50:35Zgstrauss
<ul></ul><p>Similar change to add this feature to mod_rewrite:<br /><pre>
diff --git a/src/mod_rewrite.c b/src/mod_rewrite.c
index fac6c49..faa7f84 100644
--- a/src/mod_rewrite.c
+++ b/src/mod_rewrite.c
@@ -383,6 +383,10 @@ static handler_t process_rewrite_rules(server *srv, connection *con, plugin_data
"execution error while matching: ", n);
return HANDLER_ERROR;
}
+ } else if (0 == pattern_len) {
+ /* short-circuit if blank replacement pattern
+ * (do not attempt to match against remaining rewrite rules) */
+ return HANDLER_GO_ON;
} else {
const char **list;
size_t start;
</pre></p> Lighttpd - Feature #2085: null redirects for mod_redirecthttps://redmine.lighttpd.net/issues/2085?journal_id=94222016-04-18T09:29:43Zgstrauss
<ul><li><strong>Status</strong> changed from <i>Patch Pending</i> to <i>Fixed</i></li></ul>