【问题标题】:.htaccess noob rewrite index.html.htaccess noob 重写 index.html
【发布时间】:2016-03-07 23:03:20
【问题描述】:

这是我的 .htaccess 文件

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews
    </IfModule>

    RewriteEngine On

    # Redirect Trailing Slashes...
    RewriteRule ^(.*)/$ /$1 [L,R=301]

    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>

我需要这个 www.domainname.com/folder-name/

重写/重定向到这个

www.domainname.com/folder-name/index.html

无需搞砸 htaccess 中已有的内容。

所以我很清楚...当一切都说完后,我希望 www.domainname.com/folder-name/ 显示在 URL 栏中,但我希望呈现 index.html 中的内容。

【问题讨论】:

    标签: .htaccess


    【解决方案1】:

    你有一个问题,如果你去www.domainname.com/folder-name/,你的第一个重写规则会将你重定向到www.domainname.com/folder-name,删除尾部斜杠。假设你还没有关闭DirectorySlash,mod_dir 会将这个back重定向到www.domainname.com/folder-name/,然后触发重写规则,触发 mod_dir 等。如果你已经关闭 DirectorySlash,这意味着你暴露了一个信息泄露漏洞(或“功能”),即使index.html 存在,它也会列出folder-name 文件夹的内容。

    因此,如果您真的希望能够转到 www.domainname.com/folder-name/ 并且不丢失尾部斜杠,那么您需要在第一条规则中添加一个条件,然后简单地允许 mod_dir 执行它的操作:

    DirectoryIndex index.html
    
    <IfModule mod_rewrite.c>
        <IfModule mod_negotiation.c>
            Options -MultiViews
        </IfModule>
    
        RewriteEngine On
    
        # Redirect Trailing Slashes...
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteRule ^(.*)/$ /$1 [L,R=301]
    
        # Handle Front Controller...
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteRule ^ index.php [L]
    </IfModule>
    

    如果您输入错误并且您实际上希望删除所有尾随斜杠,包括文件夹、泄露文件夹内容等等,那么您必须做很多其他事情。本质上,你必须做 mod_dir normall 为你做的事情,并确保 DirectorySlash 已关闭(仍然很危险,因为它可能会暴露你所有文件夹的文件列表):

    <IfModule mod_rewrite.c>
        <IfModule mod_negotiation.c>
            Options -MultiViews
        </IfModule>
    
        DirectorySlash Off
    
        RewriteEngine On
    
        RewriteCond %{REQUEST_FILENAME} -d
        RewriteCond %{DOCUMENT_ROOT}/$1/index.html -f
        RewriteRule ^(.*[^/])$ /$1/index.html [L]
    
        # Redirect Trailing Slashes...
        RewriteRule ^(.*)/$ /$1 [L,R=301]
    
        # Handle Front Controller...
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteRule ^ index.php [L]
    </IfModule>
    

    【讨论】:

    • 非常感谢您的回答!我尝试添加 DirectoryIndex index.html 它最终在 www.domainname.com/folder-name (没有尾部斜杠)出现“重定向循环”错误。
    • @s15199d 你在第一条规则前面包含RewriteCond %{REQUEST_FILENAME} !-d 位吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多