Skip to content

Commit 8dd7c99

Browse files
committed
More robust .htaccess generation code.
1 parent 9add4ca commit 8dd7c99

File tree

2 files changed

+12
-15
lines changed

2 files changed

+12
-15
lines changed

src/app.lua2p

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1761,11 +1761,11 @@ local function buildWebsite()
17611761
targetUrl = fixRelativeUrl(targetUrl)
17621762

17631763
b('\tRewriteCond %%{REQUEST_URI} "=%s"\n', url)
1764-
b('\tRewriteRule .* "%s" [NE,R=301,L]\n', escapeRuleSub(targetUrl))
1764+
b('\tRewriteRule .* "%s" [NE,R=301,L]\n', escapeRuleSub(targetUrl, true))
17651765
end
17661766

17671767
for url, targetUrl in pairsSorted(site._unwrittenRedirects) do
1768-
-- @Copypaste from above.
1768+
-- Some @Copypaste from above.
17691769

17701770
-- Make absolute target URLs relative if possible.
17711771
if targetUrl:sub(1, #site.baseUrl.v) == site.baseUrl.v then
@@ -1778,16 +1778,16 @@ local function buildWebsite()
17781778
slug = fixRelativeUrl(slug)
17791779
targetUrl = fixRelativeUrl(targetUrl)
17801780

1781+
if query and not targetUrl:find("?", 1, true) then
1782+
targetUrl = targetUrl .. "?" -- This will make sure the query from the source URL doesn't carry over to the target URL.
1783+
end
1784+
17811785
b('\tRewriteCond %%{REQUEST_URI} "=%s"\n', slug)
17821786
if query then
17831787
b('\tRewriteCond %%{QUERY_STRING} "=%s"\n', query)
17841788
end
17851789

1786-
b(
1787-
'\tRewriteRule .* "%s%s" [NE,R=301,L]\n',
1788-
escapeRuleSub(targetUrl),
1789-
(not query or targetUrl:find("?", 1, true)) and "" or "?"
1790-
)
1790+
b('\tRewriteRule .* "%s" [NE,R=301,L]\n', escapeRuleSub(targetUrl, true))
17911791
end
17921792

17931793
b("\n")
@@ -1809,7 +1809,7 @@ local function buildWebsite()
18091809
urlPrefix = fixRelativeUrl(urlPrefix)
18101810
b(
18111811
'\tRewriteCond %%{REQUEST_URI} "^%s"%s\n',
1812-
escapeCondPat(urlPrefix),
1812+
escapeCondPat(urlPrefix, false),
18131813
htaDenyAccess[i+1] and " [OR]" or ""
18141814
)
18151815
end
@@ -1826,13 +1826,13 @@ local function buildWebsite()
18261826
b('\t# Point to "%s" directory.\n', htaPrettyUrlDir)
18271827
b("\tRewriteCond %{REQUEST_FILENAME} !-f\n")
18281828
b('\tRewriteCond "%%{DOCUMENT_ROOT}%s%s/%%{REQUEST_URI}" -f\n', fixRelativeUrl"/", escapeTestStr(htaPrettyUrlDir))
1829-
b('\tRewriteRule .* "%s%s/$0" [L]\n', fixRelativeUrl"/", escapeRuleSub(htaPrettyUrlDir))
1829+
b('\tRewriteRule .* "%s%s/$0" [L]\n', fixRelativeUrl"/", escapeRuleSub(htaPrettyUrlDir, false))
18301830
b("\n")
18311831

18321832
b("\tRewriteCond %{REQUEST_FILENAME} !-f\n")
18331833
b("\tRewriteCond %{REQUEST_URI} !^/$\n")
18341834
b('\tRewriteCond "%%{DOCUMENT_ROOT}%s%s/%%{REQUEST_URI}/" -d\n', fixRelativeUrl"/", escapeTestStr(htaPrettyUrlDir))
1835-
b('\tRewriteRule .* "%s%s/$0/" [L]\n', fixRelativeUrl"/", escapeRuleSub(htaPrettyUrlDir))
1835+
b('\tRewriteRule .* "%s%s/$0/" [L]\n', fixRelativeUrl"/", escapeRuleSub(htaPrettyUrlDir, false))
18361836
b("\n")
18371837
end
18381838

src/functions.lua2p

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2752,23 +2752,20 @@ end
27522752

27532753

27542754

2755-
-- string = htaccessRewriteEscapeTestString( string )
27562755
function _G.htaccessRewriteEscapeTestString(s)
27572756
s = s:gsub('[$%%\\"]', "\\%0")
27582757

27592758
return s
27602759
end
27612760

2762-
-- string = htaccessRewriteEscapeCondPattern( string [, isWhole=false ] )
2763-
function _G.htaccessRewriteEscapeCondPattern(s, isWhole)
2761+
function _G.htaccessRewriteEscapeCondPattern(s, isStart)
27642762
s = s:gsub('[$%%\\".+*?^()[%]]', "\\%0")
27652763

2766-
if isWhole then s = s:gsub("^[!=<>]", "\\%0") end
2764+
if isStart then s = s:gsub("^[-!=<>]", "\\%0") end
27672765

27682766
return s
27692767
end
27702768

2771-
-- string = htaccessRewriteEscapeRuleSubstitution( string [, isWhole=false ] )
27722769
function _G.htaccessRewriteEscapeRuleSubstitution(s, isWhole)
27732770
if isWhole and s == "-" then return "\\-" end
27742771

0 commit comments

Comments
 (0)