Support

Admin Tools

#42238 Additional closing Tag in htaccess

Posted in ‘Admin Tools for Joomla! 4 & 5’
This is a public ticket

Everybody will be able to see its contents. Do not include usernames, passwords or any other sensitive information.

Environment Information

Joomla! version
5.3.2
PHP version
8.3
Admin Tools version
7.8.1

Latest post by nicholas on Saturday, 30 August 2025 12:41 CDT

abmcellnet

Hi

I ran the create htaccess process on my site. It created the file, no problem. But when I ran it through chatgpt, it came up with an extra closing tag on one of the blocks. It says that it may cause some 500 issues from time to time, but I haven't experienced any.

I just wanted to flag it to your attention in case it was something you also thought was incorrect and wanted to change it in later versions.

The extra closing tag is right at the bottom of this block I have added below.

Kind Regards
GW

 

##### Common hacking tools and bandwidth hoggers block -- BEGIN
<IfModule mod_setenvif.c>
SetEnvIf user-agent "(?i:acapbot)" stayout=1
SetEnvIf user-agent "(?i:acoonbot)" stayout=1
SetEnvIf user-agent "(?i:acunetix)" stayout=1
SetEnvIf user-agent "(?i:ahrefs)" stayout=1
SetEnvIf user-agent "(?i:alexibot)" stayout=1
SetEnvIf user-agent "(?i:archiver)" stayout=1
SetEnvIf user-agent "(?i:asterias)" stayout=1
SetEnvIf user-agent "(?i:attackbot)" stayout=1
SetEnvIf user-agent "(?i:awario)" stayout=1
SetEnvIf user-agent "(?i:backdor)" stayout=1
SetEnvIf user-agent "(?i:base64_decode)" stayout=1
SetEnvIf user-agent "(?i:becomebot)" stayout=1
SetEnvIf user-agent "(?i:bin/bash)" stayout=1
SetEnvIf user-agent "(?i:binlar)" stayout=1
SetEnvIf user-agent "(?i:blackwidow)" stayout=1
SetEnvIf user-agent "(?i:blekkobot)" stayout=1
SetEnvIf user-agent "(?i:blex)" stayout=1
SetEnvIf user-agent "(?i:blowfish)" stayout=1
SetEnvIf user-agent "(?i:bolt 0)" stayout=1
SetEnvIf user-agent "(?i:bot for jce)" stayout=1
SetEnvIf user-agent "(?i:bot mailto:[email protected])" stayout=1
SetEnvIf user-agent "(?i:bullseye)" stayout=1
SetEnvIf user-agent "(?i:bunnys)" stayout=1
SetEnvIf user-agent "(?i:butterfly)" stayout=1
SetEnvIf user-agent "(?i:c99shell)" stayout=1
SetEnvIf user-agent "(?i:careerbot)" stayout=1
SetEnvIf user-agent "(?i:casper)" stayout=1
SetEnvIf user-agent "(?i:cazoodlebot)" stayout=1
SetEnvIf user-agent "(?i:checkpriv)" stayout=1
SetEnvIf user-agent "(?i:checkprivacy)" stayout=1
SetEnvIf user-agent "(?i:cheesebot)" stayout=1
SetEnvIf user-agent "(?i:cherrypick)" stayout=1
SetEnvIf user-agent "(?i:chinaclaw)" stayout=1
SetEnvIf user-agent "(?i:choppy)" stayout=1
SetEnvIf user-agent "(?i:clshttp)" stayout=1
SetEnvIf user-agent "(?i:cmsworld)" stayout=1
SetEnvIf user-agent "(?i:cmsworldmap)" stayout=1
SetEnvIf user-agent "(?i:comodo)" stayout=1
SetEnvIf user-agent "(?i:copernic)" stayout=1
SetEnvIf user-agent "(?i:copyrightcheck)" stayout=1
SetEnvIf user-agent "(?i:cosmos)" stayout=1
SetEnvIf user-agent "(?i:crescent)" stayout=1
SetEnvIf user-agent "(?i:custo)" stayout=1
SetEnvIf user-agent "(?i:datacha)" stayout=1
SetEnvIf user-agent "(?i:default browser 0)" stayout=1
SetEnvIf user-agent "(?i:demon)" stayout=1
SetEnvIf user-agent "(?i:diavol)" stayout=1
SetEnvIf user-agent "(?i:diibot)" stayout=1
SetEnvIf user-agent "(?i:disco)" stayout=1
SetEnvIf user-agent "(?i:discobot)" stayout=1
SetEnvIf user-agent "(?i:disconnect)" stayout=1
SetEnvIf user-agent "(?i:dittospyder)" stayout=1
SetEnvIf user-agent "(?i:dotbot)" stayout=1
SetEnvIf user-agent "(?i:dotnetdotcom)" stayout=1
SetEnvIf user-agent "(?i:download demon)" stayout=1
SetEnvIf user-agent "(?i:dumbot)" stayout=1
SetEnvIf user-agent "(?i:ecatch)" stayout=1
SetEnvIf user-agent "(?i:econtext)" stayout=1
SetEnvIf user-agent "(?i:ecxi)" stayout=1
SetEnvIf user-agent "(?i:eirgrabber)" stayout=1
SetEnvIf user-agent "(?i:emailcollector)" stayout=1
SetEnvIf user-agent "(?i:emailsiphon)" stayout=1
SetEnvIf user-agent "(?i:emailwolf)" stayout=1
SetEnvIf user-agent "(?i:eolasbot)" stayout=1
SetEnvIf user-agent "(?i:eval)" stayout=1
SetEnvIf user-agent "(?i:eventures)" stayout=1
SetEnvIf user-agent "(?i:express webpictures)" stayout=1
SetEnvIf user-agent "(?i:extract)" stayout=1
SetEnvIf user-agent "(?i:extractorpro)" stayout=1
SetEnvIf user-agent "(?i:eyenetie)" stayout=1
SetEnvIf user-agent "(?i:feedfinder)" stayout=1
SetEnvIf user-agent "(?i:fhscan)" stayout=1
SetEnvIf user-agent "(?i:flaming)" stayout=1
SetEnvIf user-agent "(?i:flashget)" stayout=1
SetEnvIf user-agent "(?i:flicky)" stayout=1
SetEnvIf user-agent "(?i:foobot)" stayout=1
SetEnvIf user-agent "(?i:fuck)" stayout=1
SetEnvIf user-agent "(?i:g00g1e)" stayout=1
SetEnvIf user-agent "(?i:getright)" stayout=1
SetEnvIf user-agent "(?i:getweb!)" stayout=1
SetEnvIf user-agent "(?i:gigabot)" stayout=1
SetEnvIf user-agent "(?i:go!zilla)" stayout=1
SetEnvIf user-agent "(?i:go-ahead-got)" stayout=1
SetEnvIf user-agent "(?i:go-ahead-got-it)" stayout=1
SetEnvIf user-agent "(?i:gozilla)" stayout=1
SetEnvIf user-agent "(?i:grab)" stayout=1
SetEnvIf user-agent "(?i:grabnet)" stayout=1
SetEnvIf user-agent "(?i:grafula)" stayout=1
SetEnvIf user-agent "(?i:gt::www)" stayout=1
SetEnvIf user-agent "(?i:harvest)" stayout=1
SetEnvIf user-agent "(?i:heritrix)" stayout=1
SetEnvIf user-agent "(?i:hmview)" stayout=1
SetEnvIf user-agent "(?i:http::lite)" stayout=1
SetEnvIf user-agent "(?i:httrack)" stayout=1
SetEnvIf user-agent "(?i:httracks)" stayout=1
SetEnvIf user-agent "(?i:ia_archiver)" stayout=1
SetEnvIf user-agent "(?i:icarus6j)" stayout=1
SetEnvIf user-agent "(?i:id-search)" stayout=1
SetEnvIf user-agent "(?i:id-search.org)" stayout=1
SetEnvIf user-agent "(?i:idbot)" stayout=1
SetEnvIf user-agent "(?i:image stripper)" stayout=1
SetEnvIf user-agent "(?i:image sucker)" stayout=1
SetEnvIf user-agent "(?i:indy library)" stayout=1
SetEnvIf user-agent "(?i:interget)" stayout=1
SetEnvIf user-agent "(?i:internet ninja)" stayout=1
SetEnvIf user-agent "(?i:internetseer.com)" stayout=1
SetEnvIf user-agent "(?i:irlbot)" stayout=1
SetEnvIf user-agent "(?i:isc systems irc search 2.1)" stayout=1
SetEnvIf user-agent "(?i:jakarta)" stayout=1
SetEnvIf user-agent "(?i:java)" stayout=1
SetEnvIf user-agent "(?i:jetbot)" stayout=1
SetEnvIf user-agent "(?i:jetcar)" stayout=1
SetEnvIf user-agent "(?i:jikespider)" stayout=1
SetEnvIf user-agent "(?i:joc web spider)" stayout=1
SetEnvIf user-agent "(?i:kmccrew)" stayout=1
SetEnvIf user-agent "(?i:larbin)" stayout=1
SetEnvIf user-agent "(?i:leechftp)" stayout=1
SetEnvIf user-agent "(?i:libweb)" stayout=1
SetEnvIf user-agent "(?i:libwww)" stayout=1
SetEnvIf user-agent "(?i:libwww-perl)" stayout=1
SetEnvIf user-agent "(?i:liebaofast)" stayout=1
SetEnvIf user-agent "(?i:linkscan)" stayout=1
SetEnvIf user-agent "(?i:linksmanager.com_bot)" stayout=1
SetEnvIf user-agent "(?i:linkwalker)" stayout=1
SetEnvIf user-agent "(?i:loader)" stayout=1
SetEnvIf user-agent "(?i:lwp-download)" stayout=1
SetEnvIf user-agent "(?i:lwp-trivial)" stayout=1
SetEnvIf user-agent "(?i:majestic)" stayout=1
SetEnvIf user-agent "(?i:mass downloader)" stayout=1
SetEnvIf user-agent "(?i:masscan)" stayout=1
SetEnvIf user-agent "(?i:maxthon$)" stayout=1
SetEnvIf user-agent "(?i:mechanize)" stayout=1
SetEnvIf user-agent "(?i:mfc_tear_sample)" stayout=1
SetEnvIf user-agent "(?i:microsoft url control)" stayout=1
SetEnvIf user-agent "(?i:microsoft.url)" stayout=1
SetEnvIf user-agent "(?i:midown tool)" stayout=1
SetEnvIf user-agent "(?i:miner)" stayout=1
SetEnvIf user-agent "(?i:missigua locator)" stayout=1
SetEnvIf user-agent "(?i:mister pix)" stayout=1
SetEnvIf user-agent "(?i:mj12bot)" stayout=1
SetEnvIf user-agent "(?i:morfeus)" stayout=1
SetEnvIf user-agent "(?i:moveoverbot)" stayout=1
SetEnvIf user-agent "(?i:msfrontpage)" stayout=1
SetEnvIf user-agent "(?i:navroad)" stayout=1
SetEnvIf user-agent "(?i:nearsite)" stayout=1
SetEnvIf user-agent "(?i:net vampire)" stayout=1
SetEnvIf user-agent "(?i:netants)" stayout=1
SetEnvIf user-agent "(?i:netmechanic)" stayout=1
SetEnvIf user-agent "(?i:netspider)" stayout=1
SetEnvIf user-agent "(?i:netzip)" stayout=1
SetEnvIf user-agent "(?i:newt)" stayout=1
SetEnvIf user-agent "(?i:nicerspro)" stayout=1
SetEnvIf user-agent "(?i:nikto)" stayout=1
SetEnvIf user-agent "(?i:ninja)" stayout=1
SetEnvIf user-agent "(?i:nominet)" stayout=1
SetEnvIf user-agent "(?i:nutch)" stayout=1
SetEnvIf user-agent "(?i:octopus)" stayout=1
SetEnvIf user-agent "(?i:offline explorer)" stayout=1
SetEnvIf user-agent "(?i:offline navigator)" stayout=1
SetEnvIf user-agent "(?i:pagegrabber)" stayout=1
SetEnvIf user-agent "(?i:panscient.com)" stayout=1
SetEnvIf user-agent "(?i:papa foto)" stayout=1
SetEnvIf user-agent "(?i:pavuk)" stayout=1
SetEnvIf user-agent "(?i:pcbrowser)" stayout=1
SetEnvIf user-agent "(?i:pecl::http)" stayout=1
SetEnvIf user-agent "(?i:peoplepal)" stayout=1
SetEnvIf user-agent "(?i:petalbot)" stayout=1
SetEnvIf user-agent "(?i:phpcrawl)" stayout=1
SetEnvIf user-agent "(?i:phpshell)" stayout=1
SetEnvIf user-agent "(?i:planetwork)" stayout=1
SetEnvIf user-agent "(?i:pleasecrawl)" stayout=1
SetEnvIf user-agent "(?i:postrank)" stayout=1
SetEnvIf user-agent "(?i:proximic)" stayout=1
SetEnvIf user-agent "(?i:psbot)" stayout=1
SetEnvIf user-agent "(?i:purebot)" stayout=1
SetEnvIf user-agent "(?i:pycurl)" stayout=1
SetEnvIf user-agent "(?i:queryn)" stayout=1
SetEnvIf user-agent "(?i:queryseeker)" stayout=1
SetEnvIf user-agent "(?i:radian6)" stayout=1
SetEnvIf user-agent "(?i:radiation)" stayout=1
SetEnvIf user-agent "(?i:realdownload)" stayout=1
SetEnvIf user-agent "(?i:reget)" stayout=1
SetEnvIf user-agent "(?i:remoteview)" stayout=1
SetEnvIf user-agent "(?i:rippers 0)" stayout=1
SetEnvIf user-agent "(?i:rogerbot)" stayout=1
SetEnvIf user-agent "(?i:sbider)" stayout=1
SetEnvIf user-agent "(?i:scan)" stayout=1
SetEnvIf user-agent "(?i:scooter)" stayout=1
SetEnvIf user-agent "(?i:seamonkey$)" stayout=1
SetEnvIf user-agent "(?i:seekerspid)" stayout=1
SetEnvIf user-agent "(?i:semalt)" stayout=1
SetEnvIf user-agent "(?i:siclab)" stayout=1
SetEnvIf user-agent "(?i:sindice)" stayout=1
SetEnvIf user-agent "(?i:sistrix)" stayout=1
SetEnvIf user-agent "(?i:sitebot)" stayout=1
SetEnvIf user-agent "(?i:sitecheck.internetseer.com)" stayout=1
SetEnvIf user-agent "(?i:sitecopier)" stayout=1
SetEnvIf user-agent "(?i:siteexplorer)" stayout=1
SetEnvIf user-agent "(?i:sitesnagger)" stayout=1
SetEnvIf user-agent "(?i:skygrid)" stayout=1
SetEnvIf user-agent "(?i:smartdownload)" stayout=1
SetEnvIf user-agent "(?i:snoopy)" stayout=1
SetEnvIf user-agent "(?i:sosospider)" stayout=1
SetEnvIf user-agent "(?i:spankbot)" stayout=1
SetEnvIf user-agent "(?i:spbot)" stayout=1
SetEnvIf user-agent "(?i:sqlmap)" stayout=1
SetEnvIf user-agent "(?i:stackrambler)" stayout=1
SetEnvIf user-agent "(?i:steeler)" stayout=1
SetEnvIf user-agent "(?i:stripper)" stayout=1
SetEnvIf user-agent "(?i:sucker)" stayout=1
SetEnvIf user-agent "(?i:superbot)" stayout=1
SetEnvIf user-agent "(?i:superhttp)" stayout=1
SetEnvIf user-agent "(?i:surfbot)" stayout=1
SetEnvIf user-agent "(?i:surftbot)" stayout=1
SetEnvIf user-agent "(?i:sux0r)" stayout=1
SetEnvIf user-agent "(?i:suzukacz)" stayout=1
SetEnvIf user-agent "(?i:suzuran)" stayout=1
SetEnvIf user-agent "(?i:takeout)" stayout=1
SetEnvIf user-agent "(?i:teleport)" stayout=1
SetEnvIf user-agent "(?i:teleport pro)" stayout=1
SetEnvIf user-agent "(?i:telesoft)" stayout=1
SetEnvIf user-agent "(?i:toata dragostea mea pentru diavola)" stayout=1
SetEnvIf user-agent "(?i:true_robots)" stayout=1
SetEnvIf user-agent "(?i:turingos)" stayout=1
SetEnvIf user-agent "(?i:turnit)" stayout=1
SetEnvIf user-agent "(?i:turnitinbot)" stayout=1
SetEnvIf user-agent "(?i:unserializ)" stayout=1
SetEnvIf user-agent "(?i:uri::fetch)" stayout=1
SetEnvIf user-agent "(?i:urllib)" stayout=1
SetEnvIf user-agent "(?i:vampire)" stayout=1
SetEnvIf user-agent "(?i:vikspider)" stayout=1
SetEnvIf user-agent "(?i:voideye)" stayout=1
SetEnvIf user-agent "(?i:web image collector)" stayout=1
SetEnvIf user-agent "(?i:web sucker)" stayout=1
SetEnvIf user-agent "(?i:webalta)" stayout=1
SetEnvIf user-agent "(?i:webauto)" stayout=1
SetEnvIf user-agent "(?i:webbandit)" stayout=1
SetEnvIf user-agent "(?i:webcollage)" stayout=1
SetEnvIf user-agent "(?i:webcopier)" stayout=1
SetEnvIf user-agent "(?i:webfetch)" stayout=1
SetEnvIf user-agent "(?i:webgo is)" stayout=1
SetEnvIf user-agent "(?i:webleacher)" stayout=1
SetEnvIf user-agent "(?i:webreaper)" stayout=1
SetEnvIf user-agent "(?i:websauger)" stayout=1
SetEnvIf user-agent "(?i:webshell)" stayout=1
SetEnvIf user-agent "(?i:website extractor)" stayout=1
SetEnvIf user-agent "(?i:website quester)" stayout=1
SetEnvIf user-agent "(?i:webstripper)" stayout=1
SetEnvIf user-agent "(?i:webvac)" stayout=1
SetEnvIf user-agent "(?i:webviewer)" stayout=1
SetEnvIf user-agent "(?i:webwhacker)" stayout=1
SetEnvIf user-agent "(?i:webzip)" stayout=1
SetEnvIf user-agent "(?i:wells search ii)" stayout=1
SetEnvIf user-agent "(?i:wep search)" stayout=1
SetEnvIf user-agent "(?i:wget)" stayout=1
SetEnvIf user-agent "(?i:widow)" stayout=1
SetEnvIf user-agent "(?i:winhttp)" stayout=1
SetEnvIf user-agent "(?i:woxbot)" stayout=1
SetEnvIf user-agent "(?i:www-mechanize)" stayout=1
SetEnvIf user-agent "(?i:wwwoffle)" stayout=1
SetEnvIf user-agent "(?i:xaldon)" stayout=1
SetEnvIf user-agent "(?i:xaldon webspider)" stayout=1
SetEnvIf user-agent "(?i:xxxyy)" stayout=1
SetEnvIf user-agent "(?i:yamanalab)" stayout=1
SetEnvIf user-agent "(?i:yioopbot)" stayout=1
SetEnvIf user-agent "(?i:youda)" stayout=1
SetEnvIf user-agent "(?i:zermelo)" stayout=1
SetEnvIf user-agent "(?i:zeus)" stayout=1
SetEnvIf user-agent "(?i:zmeu)" stayout=1
SetEnvIf user-agent "(?i:zune)" stayout=1
SetEnvIf user-agent "(?i:zyborg)" stayout=1
<IfModule !mod_authz_core.c>
deny from env=stayout
</IfModule>
<IfModule mod_authz_core.c>
<RequireAll>
Require all granted
Require not env stayout
</RequireAll>
</IfModule>
##### Common hacking tools and bandwidth hoggers block -- END

</IfModule>

abmcellnet

Oh, it also flagged this block, the first closing </ifmodule> is being flagged as being in a different case (all lowercase). I couldn't tell you if it was an issue or not, apologies if it's nothing. 


## Fallback to mod_gzip when neither mod_brotli nor mod_filter is available
<IfModule !mod_brotli.c>
<IfModule !mod_filter.c>
<IfModule mod_gzip.c>
mod_gzip_on Yes
mod_gzip_dechunk Yes
mod_gzip_keep_workfiles No
mod_gzip_can_negotiate Yes
mod_gzip_add_header_count Yes
mod_gzip_send_vary Yes
mod_gzip_min_http 1000
mod_gzip_minimum_file_size 300
mod_gzip_maximum_file_size 512000
mod_gzip_maximum_inmem_size 60000
mod_gzip_handle_methods GET
mod_gzip_item_include file \.(html?|txt|css|js|php|pl|xml|rb|py|svg|scgz)$
mod_gzip_item_include mime ^text/javascript$
mod_gzip_item_include mime ^text/plain$
mod_gzip_item_include mime ^text/xml$
mod_gzip_item_include mime ^text/css$
mod_gzip_item_include mime ^application/xml$
mod_gzip_item_include mime ^application/xhtml+xml$
mod_gzip_item_include mime ^application/rss+xml$
mod_gzip_item_include mime ^application/javascript$
mod_gzip_item_include mime ^application/x-javascript$
mod_gzip_item_include mime ^image/svg+xml$
mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.*
mod_gzip_item_include handler ^cgi-script$
mod_gzip_item_include handler ^server-status$
mod_gzip_item_include handler ^server-info$
mod_gzip_item_include handler ^application/x-httpd-php
mod_gzip_item_exclude mime ^image/.*
</ifmodule>
</IfModule>
</IfModule>

nicholas
Akeeba Staff
Manager

The alleged –but non-existent– issue relates to the nested <IfModule> tags in the .htaccess file. When you count them, you’ll see that each opening tag has a corresponding closing </IfModule> tag, so they do match correctly. If any closing </IfModule> tags are added or removed, the configuration will become invalid, inevitably resulting in an HTTP 500 error for the site.

Nicholas K. Dionysopoulos

Lead Developer and Director

🇬🇷Greek: native 🇬🇧English: excellent 🇫🇷French: basic • 🕐 My time zone is Europe / Athens
Please keep in mind my timezone and cultural differences when reading my replies. Thank you!

Support Information

Working hours: We are open Monday to Friday, 9am to 7pm Cyprus timezone (EET / EEST). Support is provided by the same developers writing the software, all of which live in Europe. You can still file tickets outside of our working hours, but we cannot respond to them until we're back at the office.

Support policy: We would like to kindly inform you that when using our support you have already agreed to the Support Policy which is part of our Terms of Service. Thank you for your understanding and for helping us help you!