【问题标题】:Remove file name extensions AND redirect from www to non-www with .htaccess删除文件扩展名并使用 .htaccess 从 www 重定向到非 www
【发布时间】:2017-05-30 11:48:48
【问题描述】:

我的域名是 https://example.com - 我正在使用我的 .htaccess 从 URL 中删除文件扩展名,所以 https:/ /example.com/pages/file.php 显示为 https://example.com/pages/file,工作正常。

我现在遇到了一些重复内容的问题,我想将 https://www.example.com/pages/file 重定向到 https:// example.com/pages/file。我当前的 .htaccess 如下所示(它放置在根目录一次一次放在子目录 /pages/ 中):

 ErrorDocument 404 /404.php

 RewriteEngine On

 RewriteCond %{HTTP_HOST} !^example\.com$ [NC]
 RewriteRule ^(.*)$ https://example.com/$1 [R=301,L]

 RewriteCond %{REQUEST_FILENAME} !-f
 RewriteCond %{REQUEST_FILENAME} !-d
 RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$
 RewriteRule (.*)$ /$1/ [R=301,L]

 RewriteCond %{REQUEST_FILENAME} !-f
 RewriteCond %{REQUEST_FILENAME} !-d
 RewriteCond %{DOCUMENT_ROOT}/$1.php -f
 RewriteRule ^([^/]+)/$ $1.php [L]

 RewriteCond %{REQUEST_FILENAME} !-d
 RewriteCond %{DOCUMENT_ROOT}/$1/$2.php -f
 RewriteRule ^([^/]+)/([^/]+)/?$ /$1/$2.php [L]

问题是,通过访问 https://www.example.com/pages/file,我被重定向到 https://example.com /file,所以没有 /pages/ 部分,这非常重要,因为所有子页面都存储在该目录中。我不知道这是否重要,但我的根目录中有一些 header.php 和 footer.php 文件也需要访问。

【问题讨论】:

    标签: php apache .htaccess redirect mod-rewrite


    【解决方案1】:

    尝试移动这条规则:

     RewriteCond %{REQUEST_FILENAME} !-d
     RewriteCond %{DOCUMENT_ROOT}/$1/$2.php -f
     RewriteRule ^([^/]+)/([^/]+)/?$ /$1/$2.php [L]
    

    到顶部,就在这些规则下方:

     RewriteCond %{HTTP_HOST} !^example\.com$ [NC]
     RewriteRule ^(.*)$ https://example.com/$1 [R=301,L]
    

    这应该会导致带有“/pages/”的网址被正确重定向

    【讨论】:

    • 将您提到的规则移到更高的位置后,它(遗憾地)仍然不起作用。当尝试访问example.com/pages/website 时,我被重定向到example.com/website。您认为拥有两个 .htaccess 文件(一个在根目录,一个在 /pages/ 目录)可能有问题吗?感谢您的帮助,@Nadir Latif
    • @Niclas 您可以尝试从 pages 目录中删除 .htaccess 文件,看看是否有帮助。
    猜你喜欢
    • 1970-01-01
    • 2022-10-17
    • 2018-06-30
    • 2017-07-14
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 2014-07-26
    相关资源
    最近更新 更多