【问题标题】:htaccess to rewrite file in subfolder (2nd level) to folder (1st level)htaccess 将子文件夹(第二级)中的文件重写到文件夹(第一级)
【发布时间】:2014-08-29 07:07:43
【问题描述】:

目前,我正在使用以下 htaccess 代码从 http://www.domain.com/file 加载 http://www.domain.com/folder/file.php,从 URL 中删除文件夹名称“/folder/”和文件扩展名“.php”。

Options +FollowSymLinks
RewriteEngine on
RewriteCond %{DOCUMENT_ROOT}/folder%{REQUEST_URI}\.php -f [OR]
RewriteCond %{DOCUMENT_ROOT}/folder%{REQUEST_URI} -d
RewriteRule ^(.*)$ /folder/$1.php [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]

现在,我尝试做几乎相同的事情,但使用存储在子文件夹中的文件。

所以,换句话说,我想从http://www.domain.com/subfolder/file 打电话给http://www.domain.com/folder/subfolder/file.php

在这种情况下,隐藏扩展文件不是问题,因为上面代码的最后 2 行可以全局工作,问题在于重写,它不能简单地通过添加“子文件夹”名称来工作。我以为这会奏效,但事实并非如此:

Options +FollowSymLinks
RewriteEngine on
RewriteCond %{DOCUMENT_ROOT}/folder/subfolder%{REQUEST_URI}\.php -f [OR]
RewriteCond %{DOCUMENT_ROOT}/folder/subfolder%{REQUEST_URI} -d
RewriteRule ^(.*)$ /folder/subfolder/$1.php [L]

感谢您的帮助。

【问题讨论】:

    标签: apache .htaccess mod-rewrite redirect url-rewriting


    【解决方案1】:

    用这个替换你的两个规则:

    Options +FollowSymLinks -MultiViews
    RewriteEngine on
    
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{DOCUMENT_ROOT}/folder/$1\.php -f [NC]
    RewriteRule ^(.+?)/?$ /folder/$1.php [L]
    
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{DOCUMENT_ROOT}/$1\.php -f [NC]
    RewriteRule ^(.+?)/?$ /$1.php [L]
    

    【讨论】:

    • 谢谢阿努巴瓦。它没有用,我在这两种情况下都得到了 404 Not Found 错误,使用这个代码。
    • 你的.htaccess 不在 DocumentRoot 中吗?这个 .htaccess 中有更多规则吗? http://www.domain.com/file 给你 404 了吗?你用http://www.domain.com/folder/file.php会发生什么?
    • 嗨。是的,.htaccess 位于根域文件夹中。这个 .htaccess 中有更多规则,但我在文件末尾使用这个规则以避免冲突。 .htaccess 中的其他规则是简单的 RewriteRules,用于将 URL 从 domain.com/index.php?query=hello 更改为 domain.com/hello。当我使用你给我的代码.. 并尝试domain.com/file 时,我得到了 404 页面。其他一切正常。
    • 嗨,anubhava,对不起,我的错误。现在可以了。我正在调用 /subfolder/ 期望这个默认加载 index.php,例如我期望 domain.com/subfolder 调用 domain.com/subfolder/index.php。它没有以那种方式工作,但如果我尝试domain.com/subfolder/index,它就可以工作。我只是要为 index.php 加上另一个相对名称。它也以这种方式对我有用。谢谢哥们!
    • 实际上domain.com/subfolder 也可以在此.htaccess 顶部添加DirectoryIndex index.php
    猜你喜欢
    • 1970-01-01
    • 2021-07-09
    • 1970-01-01
    • 2021-11-20
    • 2014-01-13
    • 1970-01-01
    • 2018-03-10
    • 2012-12-12
    • 1970-01-01
    相关资源
    最近更新 更多