apache - SEO URL 和重写规则强制一个域

标签 apache .htaccess redirect seo

我有一个重写规则来强制用户从 example.com 开始至 www.example.com .这是出于 SEO 原因,因此我的 Google 结果中没有重复的网站和内容。

 # BEGIN Spark

AddDefaultCharset UTF-8

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule .* - [e=HTTP_AUTHORIZATION:%1]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$  /$1 [L,R=301]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php [QSA,L]
RewriteCond %{HTTP_HOST} ^example.com
RewriteRule (.*) https://www.example.com/$1 [R=301,L]
</IfModule>

<IfModule mod_deflate.c>
<FilesMatch "\.(html|php|txt|xml|js|css|ttf|otf|ico|json|svg|)$">
SetOutputFilter DEFLATE
</FilesMatch>
</IfModule>
# END Spark
我的问题。如果现在人们发个链接 example.com/news他们总是会重定向到首页,如 www.example.com .我如何管理他们仍然可以使用和发布短 URL,如 example.com/news1example.com/news2并将重定向到 www.example.com/news1www.example.com/news2分别。

最佳答案

你把规则放在错误的地方。它需要在内部重写之前进行(到前端 Controller : index.php )。例如。在文件的顶部,而不是最后。
通过将其放在最后,它只会正确重定向物理目录(包括主页)和静态资源(图像、CSS、JS 等)。通过前端 Controller 路由的所有其他“短 URL”将被重定向到 index.php你会看到“首页”。
并且...在请求 example.com 时避免双重重定向使用包含尾随斜杠的 URL 然后在尾随斜杠删除规则中包含一个绝对 URL,并在此之后立即包含您的非 www 到 www 规则。
例如:

RewriteEngine On

# Remove trailing slash
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$  https://www.example.com/$1 [L,R=301]

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

RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule .* - [e=HTTP_AUTHORIZATION:%1]

# Front-controller
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php [L]
您需要在测试前清除浏览器缓存,因为错误的 301(永久)重定向已被浏览器缓存。 (测试 302 - 临时 - 重定向以避免缓存问题。)
旁白:另一个问题是这些指令在 # BEGIN Spark 中... # END Spark代码块 - 这使得这些指令看起来好像是由某个自动化过程维护的?在哪种情况下,它们可能会被覆盖?

关于apache - SEO URL 和重写规则强制一个域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70045456/

相关文章:

php - 安装 hhvm 后在 apache 和 fastcgi 上使用漂亮的 url

apache - 在子目录中使用 https ://AND www. 和 cloudflare

apache - 如何使用 .htaccess 提供不带扩展名的 html 文件(如果存在)或回退到 index.php

apache - Htaccess 重定向特定的 slugs

javascript - 重定向 localhost 而不是 myserver.org :3000/login/callback

apache - 前端加载 mod_rewrite 规则导致 index.php 加载两次

java - Apache CXF 初始化上的调用方法

.htaccess - 如何使用 htaccess 关闭 Etag?

.htaccess - 如何在服务器中添加过期 header ?

express - 如何从 Internet Explorer 无缝重定向到 Microsoft Edge?