代码之家  ›  专栏  ›  技术社区  ›  Priya Patel

.htaccess重定向问题具有多个。htaccess文件

  •  1
  • Priya Patel  · 技术社区  · 2 年前

    我正在使用。htaccess文件,如下所示,用于将www重定向到我的public\u html目录中的非www

    RewriteEngine On
    RewriteBase /
    RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
    RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
    

    工作正常,重定向如下

        www.example.com
    to
        https://example.com
    

    现在在我的名为latest的子目录中,我有另一个。htaccess文件如下

    RewriteEngine on
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^([^/\.]+)/?$ index.php?page=$1 [L]
    

    这使得我的url像下面这样干净

    www.example.com/latest/index.php?page=1
    to
    www.example.com/latest/1
    

    但即使是我。主目录中的htaccess文件正在将www转换为非www,我的这个目录不会将www重定向到非www。

    我想要重定向

    www.example.com/latest/1
    to 
    https://example.com/latest/1
    

    我确信。我的目录中的htaccess文件导致了这个问题,但我不知道如何解决它。如果这里有人能帮我,请告诉我。

    谢谢

    1 回复  |  直到 2 年前
        1
  •  1
  •   Zak    2 年前

    问题是, mod_rewrite 不是继承的(至少在默认情况下)。如果“默认”目录中有重写规则。。你必须将该规则包含在“下面”的所有后续目录中。我从未见过(或听说过)允许 mod_重写 允许从父级继承 .htaccess

    更新

    THIS QUESTION 服务器故障也解释了这一点。这个 mod_重写 来自上一个的规则 htaccess 文件甚至无法处理。

    合并子目录中的2个

    RewriteEngine On
    RewriteBase /
    RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
    RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
    
    # add this only to sub directories
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^([^/\.]+)/?$ index.php?page=$1 [L]