title: Remove CI4 public/index.php with .htaccess rewrite rule on subdomain/folder
body: <p>I have a subdomain called <code>test.mysite.com</code> and I have a CI4 installation inside a folder there called project. So the actual url for the CI4 installation is <code>test.mysite.com/project/public/index.php</code>. I want to remove the public/index.php portion from the url but continue to use the public folder to have my files, as they should.</p>
  <p>I'm using this .htaccess on the project folder root:</p>
  <pre><code>DirectoryIndex /public/index.php
  RewriteEngine on
  RewriteCond $1 !^(index\.php|images|assets|css|js|robots\.txt|favicon\.ico)
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule ^(.*)$ ./public/index.php/$1 [L]
  
  &lt;IfModule mod_headers.c&gt;
    &lt;FilesMatch &quot;\.(ttf|ttc|otf|eot|woff|woff2|font.css|css|js)$&quot;&gt;
      Header set Access-Control-Allow-Origin &quot;*&quot;
    &lt;/FilesMatch&gt;
  &lt;/IfModule&gt;
  </code></pre>
  <p>But it's not working. When I access test.mysite.com/project it leads me to a server list of files. I know the .htaccess file is being properly read because when I add an error there it gives me a warning</p>
  <p><strong>EDIT:</strong>
  CI4 already comes with an htaccess inside the public folder:</p>
  <pre><code># Disable directory browsing
  Options All -Indexes
  
  &lt;IfModule mod_rewrite.c&gt;
      Options +FollowSymlinks
      RewriteEngine On
  
      # If you installed CodeIgniter in a subfolder, you will need to
      # change the following line to match the subfolder you need.
      # http://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewritebase
      # RewriteBase /
  
      # Redirect Trailing Slashes...
      RewriteCond %{REQUEST_FILENAME} !-d
      RewriteCond %{REQUEST_URI} (.+)/$
        RewriteRule ^ %1 [L,R=301]
  
      # Rewrite &quot;www.example.com -&gt; example.com&quot;
      RewriteCond %{HTTPS} !=on
      RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
      RewriteRule ^ http://%1%{REQUEST_URI} [R=301,L]
  
      # Checks to see if the user is attempting to access a valid file,
      # such as an image or css document, if this isn't true it sends the
      # request to the front controller, index.php
      RewriteCond %{REQUEST_FILENAME} !-f
      RewriteCond %{REQUEST_FILENAME} !-d
      RewriteRule ^([\s\S]*)$ index.php/$1 [L,NC,QSA]
  
      # Ensure Authorization header is passed along
      RewriteCond %{HTTP:Authorization} .
      RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
  &lt;/IfModule&gt;
  
  &lt;IfModule !mod_rewrite.c&gt;
      # If we don't have mod_rewrite installed, all 404's
      # can be sent to index.php, and everything works as normal.
      ErrorDocument 404 index.php
  &lt;/IfModule&gt;
  
  # Disable server signature start
      ServerSignature Off
  # Disable server signature end
  </code></pre>