.htaccess - Hiding a directory in the URL while preserving other files

前端 未结 2 743
温柔的废话
温柔的废话 2021-01-22 08:22

I developed a giant studio of tools and each tool has its own directory in the /tools/ folder. So if you have a tool named example, the URL would be /studio-dir/tools/e

相关标签:
2条回答
  • 2021-01-22 08:58

    You will need something like this:

    <IfModule mod_rewrite.c>
        RewriteEngine on
        RewriteBase /
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteRule    /studio/(.*) /studio/tools/$1    [L]
     </IfModule>
    

    The problem is it will not work if the requested file is both in the studio-folder and the tools-folder.

    But there no way to prevent this, as the server never knows if an URL is meant to refer to /studio/tools/ or /studio/

    Edit: You can remove /tools/ from the visible urls like this:

    <IfModule mod_rewrite.c>
        RewriteEngine on
        RewriteBase /
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteRule    /studio/(.*) /studio/tools/$1    [L]
        RewriteRule    /studio/tools/(.*) /studio/$1    [L,R=302]
     </IfModule>
    
    0 讨论(0)
  • 2021-01-22 08:58

    In this example there is not 404 but it only works to hide only one dir

    RewriteEngine On
    RewriteBase /
    RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+dirname/([^\s]+) [NC]
    RewriteRule ^ %1 [R=301,L]
    
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule (?!^dirname/)^(.*)$ /dirname/$1 [L,NC]
    
    0 讨论(0)
提交回复
热议问题