{"id":382140,"date":"2026-10-14T07:28:51","date_gmt":"2026-10-14T07:28:51","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/bd-reverse-proxy\/"},"modified":"2026-10-14T07:28:23","modified_gmt":"2026-10-14T07:28:23","slug":"bd-reverse-proxy","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/bd-reverse-proxy\/","author":23214306,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.0","stable_tag":"1.0.0","tested":"7.1.3","requires":"5.8","requires_php":"7.4","requires_plugins":null,"header_name":"Brilliant Directories Site Connector","header_author":"Brilliant Directories","header_description":"Host a Brilliant Directories site through a website subfolder without manually uploading proxy files.","assets_banners_color":"7c7445","last_updated":"2026-10-14 07:28:23","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":0,"downloads":44,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"brilliantdirectories","date":"2026-10-14 07:28:23","revision":3745552}},"upgrade_notice":{"1.0.0":"<p>Initial release.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3745604,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3745604,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256},"icon.svg":{"filename":"icon.svg","revision":3745604,"resolution":false,"location":"assets","locale":false}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3745604,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3745604,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3745604,"resolution":"1","location":"assets","locale":"","width":1285,"height":785},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3745604,"resolution":"2","location":"assets","locale":"","width":1293,"height":790}},"screenshots":{"1":"Plugin settings and connection configuration.","2":"Connection health status."}},"plugin_section":[],"plugin_tags":[239347,2466,1932,45950,29816],"plugin_category":[58],"plugin_contributors":[239349],"plugin_business_model":[],"class_list":["post-382140","plugin","type-plugin","status-publish","hentry","plugin_tags-brilliant-directories","plugin_tags-directory","plugin_tags-membership","plugin_tags-reverse-proxy","plugin_tags-subdirectory","plugin_category-user-management","plugin_contributors-brilliantdirectories","plugin_committers-brilliantdirectories"],"banners":{"banner":"https:\/\/ps.w.org\/bd-reverse-proxy\/assets\/banner-772x250.png?rev=3745604","banner_2x":"https:\/\/ps.w.org\/bd-reverse-proxy\/assets\/banner-1544x500.png?rev=3745604","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":"https:\/\/ps.w.org\/bd-reverse-proxy\/assets\/icon.svg?rev=3745604","icon":"https:\/\/ps.w.org\/bd-reverse-proxy\/assets\/icon.svg?rev=3745604","icon_2x":false,"generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/bd-reverse-proxy\/assets\/screenshot-1.png?rev=3745604","caption":"Plugin settings and connection configuration."},{"src":"https:\/\/ps.w.org\/bd-reverse-proxy\/assets\/screenshot-2.png?rev=3745604","caption":"Connection health status."}],"raw_content":"<!--section=description-->\n<p>This plugin lets a WordPress administrator connect an external Brilliant Directories (BD) website and publish it at a path on the WordPress site, for example <code>\/directory<\/code>.<\/p>\n\n<p>After you save a valid BD website URL, API key, and subfolder, the plugin writes the proxy files under the site root (the folder that serves your WordPress home URL). Visitors use your WordPress hostname. The plugin does not require you to upload <code>.htaccess<\/code> or PHP files by hand.<\/p>\n\n<h4>Requirements<\/h4>\n\n<ul>\n<li>A Brilliant Directories website and API key.<\/li>\n<li>Apache with <code>mod_rewrite<\/code> enabled (the generated <code>.htaccess<\/code> routes only the chosen subfolder).<\/li>\n<li>The WordPress root folder must be writable so the plugin can create the subfolder.<\/li>\n<\/ul>\n\n<h4>What the plugin does<\/h4>\n\n<ul>\n<li>Stores the BD website URL and an encrypted API key.<\/li>\n<li>Validates the subfolder (including nested paths) and checks that it is not reserved by WordPress or already used by a page.<\/li>\n<li>Installs proxy files at <code>{WordPress root}\/{subfolder}\/<\/code>.<\/li>\n<li>Forwards directory traffic to your Brilliant Directories site and rewrites links, cookies, and redirects onto the WordPress path.<\/li>\n<li>Shows connection health for troubleshooting.<\/li>\n<li>Saves the BD Site ID after a successful connection check and adds an <strong>Open BD Admin<\/strong> button that opens the site's Brilliant Directories admin in a new tab.<\/li>\n<\/ul>\n\n<h3>Nested subfolders<\/h3>\n\n<p>Nested paths are allowed. Examples:<\/p>\n\n<ul>\n<li><code>directory<\/code><\/li>\n<li><code>resources\/directory<\/code><\/li>\n<li><code>resources\/directory\/members<\/code><\/li>\n<\/ul>\n\n<p>Each segment may contain only letters, numbers, hyphens, and underscores. Do not use a leading slash, <code>..<\/code>, or a full URL.<\/p>\n\n<p>The generated rewrite rules apply only inside that folder. Other WordPress URLs (<code>\/wp-admin<\/code>, posts, pages) stay on WordPress.<\/p>\n\n<h3>Changing the subfolder<\/h3>\n\n<p>When you change <strong>Define Subfolder<\/strong>, the plugin:<\/p>\n\n<ol>\n<li>Validates the new path.<\/li>\n<li>Installs and verifies proxy files at the <strong>new<\/strong> location first.<\/li>\n<li>Only then updates or removes the previous plugin files.<\/li>\n<li>Restores the previous subfolder setting if the new install fails.<\/li>\n<\/ol>\n\n<p>An SEO warning appears before you save when the path differs from the installed location. It shows the previous URL and the new URL.<\/p>\n\n<p>You can:<\/p>\n\n<ul>\n<li><strong>Keep the previous subfolder<\/strong> \u2014 leave the old proxy files in place so both URLs keep working.<\/li>\n<li><strong>Redirect the previous URL (HTTP 301)<\/strong> \u2014 replace the old proxy with a permanent redirect to the new URL. Inner paths such as <code>\/login<\/code> are redirected too.<\/li>\n<li>Select neither option \u2014 previous plugin files are removed after the new install succeeds.<\/li>\n<\/ul>\n\n<p>A 301 cannot be created when the old and new paths overlap (for example <code>directory<\/code> and <code>directory\/members<\/code>), because a parent redirect would also catch the child path.<\/p>\n\n<p>If both keep and redirect are selected, the 301 is installed at the previous path.<\/p>\n\n<h3>reCAPTCHA<\/h3>\n\n<p>Google reCAPTCHA checks the hostname the visitor sees in the browser. That is this <strong>WordPress<\/strong> hostname, not the Brilliant Directories hostname.<\/p>\n\n<p>If login or forms show \u201cInvalid domain for site key\u201d, add the WordPress hostname (for example <code>example.com<\/code>) to the same reCAPTCHA site key in <a href=\"https:\/\/www.google.com\/recaptcha\/admin\">Google reCAPTCHA admin<\/a>.<\/p>\n\n<p><strong>Connection Health<\/strong> includes a <strong>reCAPTCHA Domain<\/strong> check. It reads the public site key from the Brilliant Directories login page and asks Google whether the WordPress hostname is allowed for that key. It shows <strong>Error<\/strong> until the hostname is added. If no reCAPTCHA is found on the login page, the check shows <strong>Healthy<\/strong>.<\/p>\n\n<h3>Deactivate, update, and uninstall<\/h3>\n\n<ul>\n<li><strong>Deactivate<\/strong> leaves settings and the live subfolder in place. The public directory URL keeps working.<\/li>\n<li><strong>Plugin update<\/strong> refreshes generated routing\/code files. Customer values in <code>proxy-config.php<\/code> (API key, source URL, paths) are preserved.<\/li>\n<li><strong>Delete \/ uninstall<\/strong> removes plugin settings and only folders this plugin created (a live proxy marked by <code>directory-proxy.php<\/code>, or a 301 stub this plugin wrote). Other WordPress folders are not deleted.<\/li>\n<\/ul>\n\n<p>Uninstall is destructive. Back up the site if you may need the directory URL again.<\/p>\n\n<h3>External Services<\/h3>\n\n<p>This plugin makes outbound requests to the Brilliant Directories website URL you enter and, for the reCAPTCHA Domain check, to Google reCAPTCHA. It does not phone home to any other host from PHP.<\/p>\n\n<ul>\n<li><strong>API key check<\/strong> \u2014 <code>GET {your BD site}\/api\/v2\/token\/verify<\/code> with the <code>x-api-key<\/code> header. Runs when you click Save \/ Install, when the form checks the key, and when you click Check Connection.<\/li>\n<li><strong>Source ping<\/strong> \u2014 <code>GET {your BD site}\/<\/code> to confirm the site is reachable. Runs with Check Connection and after a successful save (health refresh).<\/li>\n<li><strong>reCAPTCHA Domain check<\/strong> \u2014 <code>GET {your BD site}\/login<\/code> (and <code>\/<\/code> if needed) to read the public reCAPTCHA site key, then <code>GET https:\/\/www.google.com\/recaptcha\/api.js<\/code> and <code>https:\/\/www.google.com\/recaptcha\/api2\/anchor<\/code> (or the Enterprise equivalents) with that site key and your WordPress origin. Runs with Check Connection and after a successful save. The license key is never sent to Google. See the <a href=\"https:\/\/policies.google.com\/privacy\">Google Privacy Policy<\/a> and <a href=\"https:\/\/policies.google.com\/terms\">Google Terms of Service<\/a>.<\/li>\n<li><strong>Public proxy<\/strong> \u2014 visitor requests to your WordPress subfolder are forwarded with cURL to that same BD site (pages, assets, login, and forms).<\/li>\n<\/ul>\n\n<p>The settings page loads no remote content. It only shows links to Brilliant Directories resources, which open in a new tab when clicked.<\/p>\n\n<p>Privacy &amp; Terms:<\/p>\n\n<ul>\n<li><a href=\"https:\/\/www.brilliantdirectories.com\/online-directory-script-privacy-policy\">Brilliant Directories Privacy Policy<\/a><\/li>\n<li><a href=\"https:\/\/www.brilliantdirectories.com\/online-directory-terms-of-use\">Brilliant Directories Terms of Service<\/a><\/li>\n<\/ul>\n\n<h3>Support<\/h3>\n\n<p>If you have any issues or need help, please visit our support forum or contact us at support@brilliantdirectories.com.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>bd-reverse-proxy<\/code> folder to <code>\/wp-content\/plugins\/<\/code>, or install the zip from <strong>Plugins \u2192 Add New \u2192 Upload Plugin<\/strong>.<\/li>\n<li>Activate the plugin on the Plugins screen.<\/li>\n<li>Open <strong>BD Site on WP<\/strong> in the WordPress admin menu (<code>\/wp-admin\/admin.php?page=bd-reverse-proxy<\/code>).<\/li>\n<li>Enter:\n\n<ul>\n<li><strong>BD Website URL<\/strong> \u2014 the full Brilliant Directories site URL, including <code>https:\/\/<\/code>.<\/li>\n<li><strong>BD API KEY<\/strong> \u2014 generated in your Brilliant Directories admin. See <a href=\"https:\/\/support.brilliantdirectories.com\/support\/solutions\/articles\/12000088768\">How to Generate API Key<\/a>.<\/li>\n<li><strong>Define Subfolder<\/strong> \u2014 the public path on this WordPress site, with no leading or trailing slash. Example: <code>directory<\/code>.<\/li>\n<\/ul><\/li>\n<li>Click <strong>Save \/ Install<\/strong>.<\/li>\n<li>Open the Public URL shown on the settings page (for example <code>https:\/\/example.com\/directory\/<\/code>).<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"do%20i%20need%20a%20brilliant%20directories%20account%3F\"><h3>Do I need a Brilliant Directories account?<\/h3><\/dt>\n<dd><p>Yes. You can start at <a href=\"https:\/\/www.brilliantdirectories.com\">https:\/\/www.brilliantdirectories.com<\/a>.<\/p><\/dd>\n<dt id=\"where%20do%20i%20get%20an%20api%20key%3F\"><h3>Where do I get an API key?<\/h3><\/dt>\n<dd><p>From your Brilliant Directories website. See <a href=\"https:\/\/support.brilliantdirectories.com\/support\/solutions\/articles\/12000088768\">How to Generate API Key<\/a>.<\/p><\/dd>\n<dt id=\"why%20was%20the%20api%20key%20rejected%3F\"><h3>Why was the API key rejected?<\/h3><\/dt>\n<dd><p>Confirm the BD Website URL is the site that issued the key, the key is complete (no extra spaces), and the site is reachable over HTTPS.<\/p><\/dd>\n<dt id=\"why%20can%E2%80%99t%20i%20use%20a%20subfolder%20name%3F\"><h3>Why can\u2019t I use a subfolder name?<\/h3><\/dt>\n<dd><p>The path may be reserved (<code>wp-admin<\/code>, <code>wp-content<\/code>, <code>wp-includes<\/code>, <code>wp-json<\/code>), already used by a WordPress page or permalink, or already exist as a folder that this plugin does not own.<\/p><\/dd>\n<dt id=\"does%20this%20work%20on%20nginx%3F\"><h3>Does this work on Nginx?<\/h3><\/dt>\n<dd><p>The generated <code>.htaccess<\/code> is for Apache (and compatible hosts such as LiteSpeed with rewrite enabled). Nginx maps are not generated. Use Apache with <code>mod_rewrite<\/code>, or add equivalent Nginx routing for the subfolder yourself.<\/p><\/dd>\n<dt id=\"opening%20proxy-config.php%20in%20the%20browser\"><h3>Opening proxy-config.php in the browser<\/h3><\/dt>\n<dd><p>That file is denied over HTTP (403). It must not show the API key. If it does, the server is not applying the generated <code>.htaccess<\/code> rules.<\/p><\/dd>\n<dt id=\"the%20directory%20page%20loads%20but%20assets%20or%20login%20break\"><h3>The directory page loads but assets or login break<\/h3><\/dt>\n<dd><p>Click <strong>Save \/ Install<\/strong> again so proxy files match the current plugin version. Confirm you are browsing the WordPress public URL, not the Brilliant Directories hostname. For reCAPTCHA errors, add the WordPress hostname in Google reCAPTCHA admin.<\/p><\/dd>\n<dt id=\"what%20happens%20if%20i%20change%20the%20brilliant%20directories%20url%20later%3F\"><h3>What happens if I change the Brilliant Directories URL later?<\/h3><\/dt>\n<dd><p>Save \/ Install regenerates proxy configuration for the current subfolder using the new URL and stored API key.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<\/ul>","raw_excerpt":"Host a Brilliant Directories site through a website subfolder without manually uploading proxy files.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/382140","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=382140"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/brilliantdirectories"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=382140"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=382140"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=382140"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=382140"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=382140"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=382140"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}