当更改为 WWW 时,所有 URL 都显示 index.php?page= 如何删除 index.php?page=?

当更改为 WWW 时,所有 URL 都显示 index.php?page= 如何删除 index.php?page=?

由于我遇到了有关重复网站的 SEO 错误,我最近设法将所有 URL 从非 www 指向 www。

一旦我应用了 www 规则,我的所有 URL 都会开始显示,index.php?page=看起来不太好看。

以下是我当前的.htaccess规则:


RewriteEngine On

RewriteBase /

RewriteRule ^([-a-zA-Z0-9]+)$ index.php?page=$1

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

RewriteEngine On
RewriteBase /

# Removes index.php?page=$1
RewriteCond %{THE_REQUEST} ^.*/index.php?page=$1
RewriteRule ^(.*)index.php?page=$1$ https://www.example.com/$1 [R=301,L]
RewriteRule ^(.*)index$ https://www.example.com/$1 [R=301,L]

我试过上面的代码,但没有成功。我是不是漏掉了什么?

答案1

您的规则顺序错误。您的外部非 www 到 www 重定向需要位于内部重写之前,紧接在第一个RewriteBase指令之后。

一般来说,“重定向”应该始终位于“重写”之前。

更新:您需要确保已清除浏览器缓存(以及任何中间缓存),因为错误的 301(永久)重定向肯定已被浏览器缓存。

总而言之,您的规则应如下所示:

RewriteEngine On

RewriteBase /

# Redirect non-www to www
RewriteCond %{HTTP_HOST} !^www\.example\.com$
RewriteRule (.*) https://www.example.com/$1 [R=301,L]

# Internal rewrite for pages
RewriteRule ^([-a-zA-Z0-9]+)$ index.php?page=$1 [L]

正则表达式中的任何文字点都需要用反斜杠转义。L如果您稍后添加其他规则,则应在重写中包含该标志。

(注意:我假设您链接到的是表单的 URL /this-is-my-page,而不是/index.php?page=this-is-my-page- 否则您需要更改内部链接。)

相关内容