删除文件扩展名并使用.htaccess从www重定向到非www

时间:2017-01-15 15:30:48

标签: php apache .htaccess redirect mod-rewrite

我的域名是 https: // example.com - 我正在使用我的.htaccess从网址中删除文件扩展名,因此 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: //示例.com / file,所以没有/ pages / part,这非常重要,因为所有子页面都存储在该目录中。我不知道它是否重要,但我的根目录中有一些header.php和footer.php文件,这些文件也需要可访问。

1 个答案:

答案 0 :(得分: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 /”的网址被正确重定向