6 .htaccess 重写:删除index.html、删除.html、强制非www、强制尾部斜杠

2024-02-01

我必须提供一些有关我的网站环境的信息

  1. 我的根目录中有静态网页。

  2. WordPress 安装在子词典 www.domain.com/blog/ 中

  3. 我有两个 .htaccess ,一个在根目录中,一个在 wordpress 中 文件夹。

我想要

  • 所有 URL 上的 www 到 non
  • 从 url 中删除 index.html
  • 删除所有 .html 扩展名/将 301 重定向到 url 没有 .html 扩展名
  • 将尾部斜杠添加到静态网页/从非尾部斜杠重定向 301
  • 强制尾随斜杠到 Wordpress 网页/从非尾随斜杠重定向 301

一些例子

域名.tld/index.html >> 域名.tld/

域名.tld/file.html >> 域名.tld/file/

域名.tld/file.html/ >> 域名.tld/file/

域名.tld/wordpress/post-name >> 域名.tld/wordpress/post-name/

我在 ROOT htaccess 中的代码是

    <IfModule mod_rewrite.c> 
    Options +FollowSymLinks -MultiViews


    RewriteEngine On 
    RewriteBase /

    #removing trailing slash
    RewriteCond %{REQUEST_FILENAME} !-d     
    RewriteRule ^(.*)/$ $1 [R=301,L]

    #www to non
    RewriteCond %{HTTP_HOST} ^www\.(([a-z0-9_]+\.)?domain\.com)$ [NC]
    RewriteRule .? http://%1%{REQUEST_URI} [R=301,L]

    #html
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule ^([^\.]+)$ $1.html [NC,L]

    #index redirect 
    RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.html\ HTTP/ 
    RewriteRule ^index\.html$ http://domain.com/ [R=301,L]
    RewriteCond %{THE_REQUEST} \.html 
    RewriteRule ^(.*)\.html$ /$1 [R=301,L] 
    </IfModule> 

    <IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteBase /blog/
    # Force Trailing Slash for wordpress
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)[^/]{1}$ %{REQUEST_URI}/ [L,R=301]
    </IfModule> 

上面的代码做了

  1. 将 www 重定向到非 www
  2. 删除末尾的尾部斜杠(如果存在)
  3. 删除index.html
  4. 删除所有 .html
  5. 将 301 重定向到文件名,末尾不带斜杠
  6. 对 WordPress 强制尾随斜杠并从末尾的非尾随斜杠重定向 301

EDIT

#removing trailing slash Rule usage

对于站点根目录 .htaccess 来说是这样的:

<IfModule mod_rewrite.c> 
Options +FollowSymLinks -MultiViews

RewriteEngine On 
RewriteBase /

#www to non
RewriteCond %{HTTP_HOST} ^www\.(([a-z0-9_]+\.)?domain\.com)$ [NC]
RewriteRule ^(.+?)/?$ http://%1/$1/ [R=301,L]

RewriteCond %{THE_REQUEST} \s/+(.+?)\.html/?[\s?] [NC]
RewriteRule ^ /%1/ [R=301,NE,L]

#index redirect 
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.html\ HTTP/ 
RewriteRule ^index\.html$ http://%{HTTP_HOST}/ [R=301,L]

# add a trailing slash to non files
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*?[^/])$ %{REQUEST_URI}/ [L,R=301,NE]

# add html internally
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([^.]+)/$ $1.html [L]

</IfModule>

确保在测试之前清除浏览器缓存。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

6 .htaccess 重写:删除index.html、删除.html、强制非www、强制尾部斜杠 的相关文章

  • 获取URL查询字符串参数

    从格式如下的 URL 查询字符串获取参数的 所需代码较少 的方法是什么 www mysite com category subcategory myqueryhash 输出应该是 myqueryhash 我知道这种方法 www mysite
  • 我应该在客户端和服务器上都使用 MVC 吗?

    我决定在我的网站上使用 MVC 模式 所以 现在我在我的网站上使用 Backbone js 框架 我网站上的所有操作都是ajaxy 所以server只从db获取数据 并将数据保存到db 我是否也需要在服务器端使用 MVC 这让一切都变得复杂
  • 正则表达式:替换字符串中第一次出现的字符

    我有这个字符串 ABCDE 某事某事 XYZ 0 JKLM 0 某事某事 some value 仅将第一个冒号 替换为下划线 的正则表达式是什么 在标准系统中 您只需编写 s 要实现全局替换 用下划线替换冒号的每个实例 您需要在替换后添加一
  • 是否可以替换 php 中的函数(例如邮件)并使其执行其他操作?

    我想用 PHP 重写一个函数 比如说 mail 函数 并且希望从现在开始调用 mail 时 它将加载我的 mail 版本而不是默认的 php 版本 这在 php 中可能吗 我想这样做的原因是因为我有数千行调用 mail 的代码 并且我不想重
  • 如何自定义 FOS UserBundle URL

    我已经安装了FOS用户包 https github com FriendsOfSymfony FOSUserBundle我想将网址自定义为 account login account register account logout代替 lo
  • ZF2 路线参数带斜杠

    是否可以使用包含正斜杠的参数来组装路由 Config someroute gt array type gt Zend Mvc Router Http Segment options gt array route gt someroute p
  • PHP - 按后退按钮时 Session_Destroy

    这是我的问题 我有一个名为login php 的登录页面 不包含HTML 代码 当用户正确输入其凭据时 他会被重定向到特定页面 在本例中我们将使用 test php 该页面上的唯一链接会注销当前会话 并将用户返回到index html 我的
  • 如何从继承的方法中获取派生类的路径?

    如何从继承的方法中获取当前类的路径 我有以下内容 and
  • PHP - 解析具有固定列宽的文本文件

    我是 PHP 和 Laravel 的新手 我需要打开文件并解析内容以将它们传递到数据库 文本文件具有固定的列宽 它没有分隔符或标题 我认为使用子字符串并将每个子字符串分配给变量将是正确的方法 但我仍在学习该语言的过程中 我不知道如何实现这一
  • 转义字符串中的引号

    我有一个 python 字典 例如 pk 1 name John size 1 4 etc 该尺寸为 1 4 英寸 我如何 转义 该引用 所以它仍然会显示为 1 4 它是一个列表 所以我不能像这样手动编码1 4 我试过replace 编辑
  • htaccess 中的重写规则以匹配某些文件扩展名

    如何查找某些文件扩展名的实例 例如 jpg png css js php 如果没有匹配项 则将其发送到 index php route 1 我希望能够允许自定义用户名使用句点 所以 重写http example com my name ht
  • MySQL 将字符串视为整数

    我的申请有很大的问题 在开始之前我会红色这些主题Mysql 将 varchar 视为 int bug https stackoverflow com questions 17843329 mysql treating varchar as
  • 将字符串转换为关联数组键?

    给定一个包含由点分隔的值的字符串 property entry item 将其转换为关联数组的键的最佳方法是什么 result imported data property entry item 该字符串可以是任意长度 任意数量的点并包含一
  • 无法使用服务帐户访问我的 Google 云端硬盘文件

    我想创建一个应用程序 可以将文件添加到谷歌驱动器并将该文件共享给其他用户 电子邮件受保护 cdn cgi l email protection 该用户 电子邮件受保护 cdn cgi l email protection应该登录到应用程序
  • 传递多个数组以在 codeigniter 中查看

    我的模型是这个 两个函数view和spl function view result this gt db gt get tb ourcity return result gt result array query this gt db gt
  • PHPMailer - AddAttachment 不起作用

    我有一个网络表单 它使用 phpmailer 函数将表单内容通过电子邮件发送回给我 我正在尝试添加 AddAttachment 功能 但我似乎在 php ini 中遇到问题 这是我的 html 片段 td div align right A
  • 从自定义设置会话文件夹中删除旧会话文件?

    使用 PHP 如果我设置自定义会话文件夹来存储会话文件 我必须做什么才能确保旧会话文件最终被删除 有没有办法让 Apache 或 PHP 为我处理这个问题 或者我需要设置一些东西来自己清理这个文件夹 非常感谢有关此主题的任何信息 我目前正在
  • mysql_escape_string VS mysql_real_escape_string

    我知道mysql escape string从 5 3 开始已弃用 但实际差异是什么mysql real escape string 我的想法是mysql real escape string与以下完全相同mysql escape stri
  • 错误:无法检索请求的 URL

    我在 CodeIgniter 中有一个项目并托管在子域中 它有一个错误 所请求的网址无法检索 这是它的图片 Error https i stack imgur com ltBZB png 我在新安装 CodeIgniter 时遇到了同样的错
  • PHP 相对于 ASP.NET 有什么优势? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi

随机推荐