跳转到主要内容
你行网

Main navigation

  • 首页
  • Drupal
  • 编程与开发
  • 数据库
  • 操作系统与应用
  • 服务器与运维
  • 社区
User account menu
  • 登录

面包屑

  1. 首页

drupal .htaccess 文件的配置解释

由 hrs, 31 五月, 2024

# Apache/PHP/Drupal 设置:
#

# 保护文件和目录不被窥视。
<FilesMatch "\.(engine|inc|install|make|module|profile|po|sh|.*sql|theme|twig|tpl(\.php)?|xtmpl|yml)(~|\.sw[op]|\.bak|\.orig|\.save)?$|^(\.(?!well-known).*|Entries.*|Repository|Root|Tag|Template|composer\.(json|lock)|web\.config|yarn\.lock|package\.json)$|^#.*#$|\.php(~|\.sw[op]|\.bak|\.orig|\.save)$">
 <IfModule mod_authz_core.c>
   Require all denied
 </IfModule>
 <IfModule !mod_authz_core.c>
   Order allow,deny
 </IfModule>
</FilesMatch>

# 不显示映射到目录的URL的目录列表。
Options -Indexes

# 设置默认处理程序。
DirectoryIndex index.php index.html index.htm

# 为SVGZ添加正确的编码。
AddType image/svg+xml svg svgz
AddEncoding gzip svgz

# 以下大多数PHP设置无法在运行时更改。请参阅
# sites/default/default.settings.php 和
# Drupal\Core\DrupalKernel::bootEnvironment() 了解可以在运行时更改的设置。

# PHP 7,Apache 1 和 2。
<IfModule mod_php7.c>
 php_value assert.active                   0
</IfModule>

# PHP 8,Apache 1 和 2。
<IfModule mod_php.c>
 php_value assert.active                   0
</IfModule>

# 需要启用mod_expires。
<IfModule mod_expires.c>
 # 启用到期。
 ExpiresActive On

 # 将所有文件和重定向缓存2周(A)。
 ExpiresDefault A1209600

 <FilesMatch \.php$>
   # 禁止缓存PHP脚本,除非它们自己明确发送缓存头。否则所有脚本都必须覆盖mod_expires设置的头以获得其他缓存行为。如果引导过程中发生错误,可能会失败,如果在子目录中安装了非Drupal的PHP文件,也可能会出现问题。
   ExpiresActive Off
 </FilesMatch>
</IfModule>

# 如果未启用mod_rewrite,则设置回退资源。这允许Drupal在没有清洁URL的情况下工作。这需要Apache版本>= 2.2.16。如果Drupal不是通过顶级URL访问(即:http://example.com/drupal/ 而不是 http://example.com/),需要调整index.php的路径。
<IfModule !mod_rewrite.c>
 FallbackResource /index.php
</IfModule>

# 各种重写规则。
<IfModule mod_rewrite.c>
 RewriteEngine on

 # 添加index.php重定向
 # 将以 "index.php/" 开头的URL使用301重定向到正确的地址:
 RewriteRule ^index.php/$ / [R=301,L]
 RewriteRule ^index.php/(.*) /$1 [R=301,L]

 # 如果通过https://访问,将"protossl"设置为"s"。如果启用了“www.”剥离或强制执行,以确保不会在http和https之间来回跳转。
 RewriteRule ^ - [E=protossl]
 RewriteCond %{HTTPS} on
 RewriteRule ^ - [E=protossl:s]

 # 确保即使在CGI或FastCGI下运行,Authorization HTTP头也可用于PHP。
 RewriteRule ^ - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

 # 阻止访问以句点开头的“隐藏”目录。这包括版本控制系统(如Subversion或Git)用于存储控制文件的目录。文件名以句点开头的文件以及CVS使用的控制文件受到上面的FilesMatch指令保护。
 #
 # 注意:这仅在加载了mod_rewrite时有效。没有mod_rewrite,不可能通过.htaccess阻止整个目录的访问,因为此处不允许使用<DirectoryMatch>。
 #
 # 如果没有安装mod_rewrite,你应该从webroot中删除这些目录或以其他方式保护它们不被下载。
 RewriteRule "/\.|^\.(?!well-known/)" - [F]

 # 如果你的网站可以使用带有和不带有“www.”前缀的地址访问,可以使用以下设置之一将用户重定向到你首选的URL,带或不带“www.”前缀。选择仅一个选项:
 #
 # 要将所有用户重定向到带有“www.”前缀的地址,
 # (http://example.com/foo 将被重定向到 http://www.example.com/foo)
 # 取消注释以下内容:
 # RewriteCond %{HTTP_HOST} .
 # RewriteCond %{HTTP_HOST} !^www\. [NC]
 # RewriteRule ^ http%{ENV:protossl}://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
 #
 # 要将所有用户重定向到不带“www.”前缀的地址,
 # (http://www.example.com/foo 将被重定向到 http://example.com/foo)
 # 取消注释以下内容:
 # RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
 # RewriteRule ^ http%{ENV:protossl}://%1%{REQUEST_URI} [L,R=301]

 # 如果你在子目录或VirtualDocumentRoot中使用Drupal,并且重写规则无法正常工作,请修改RewriteBase。
 # 例如,如果你的网站位于 http://example.com/drupal,取消注释并修改以下行:
 # RewriteBase /drupal
 #
 # 如果你的网站运行在 http://example.com/ 的VirtualDocumentRoot中,
 # 取消注释以下行:
 # RewriteBase /

 # 将常见的PHP文件重定向到它们的新位置。
 RewriteCond %{REQUEST_URI} ^(.*)?/(install\.php) [OR]
 RewriteCond %{REQUEST_URI} ^(.*)?/(rebuild\.php)
 RewriteCond %{REQUEST_URI} !core
 RewriteRule ^ %1/core/%2 [L,QSA,R=301]

 # 在安装期间重写install.php以查看mod_rewrite是否正常工作
 RewriteRule ^core/install\.php core/install.php?rewrite=ok [QSA,L]

 # 将不直接引用文件系统中的文件的所有请求传递给index.php。
 RewriteCond %{REQUEST_FILENAME} !-f
 RewriteCond %{REQUEST_FILENAME} !-d
 RewriteCond %{REQUEST_URI} !=/favicon.ico
 RewriteRule ^ index.php [L]

 # 出于安全原因,拒绝访问公共网站上的其他PHP文件。
 # 注意:以下URI条件未锚定在开头(^),因为Drupal可能位于子目录中。为了进一步提高安全性,可以将'!/'替换为'!^/'。
 # 允许访问 /core 中的PHP文件(如authorize.php或install.php):
 RewriteCond %{REQUEST_URI} !/core/[^/]*\.php$
 # 允许访问测试特定的PHP文件:
 RewriteCond %{REQUEST_URI} !/core/modules/system/tests/https?\.php
 # 允许访问Statistics模块的自定义前端控制器。
 # 复制并调整此规则以直接执行贡献或自定义模块中的PHP文件,或在同一目录中运行另一个PHP应用程序。
 RewriteCond %{REQUEST_URI} !/core/modules/statistics/statistics\.php$
 # 禁止访问不符合上述规则的任何其他PHP文件。
 # 特别是不允许直接提供autoload.php。
 RewriteRule "^(.+/.*|autoload)\.php($|/)" - [F]

 # 正确提供gzip压缩的CSS和JS文件。
 # 需要启用mod_rewrite和mod_headers。
 <IfModule mod_headers.c>
   # 如果存在并且客户端接受gzip压缩,提供gzip压缩的CSS文件。
   RewriteCond %{HTTP:Accept-encoding} gzip
   RewriteCond %{REQUEST_FILENAME}\.gz -s
   RewriteRule ^(.*css_[a-zA-Z0-9-_]+)\.css$ $1\.css\.gz [QSA]

   # 如果存在并且客户端接受gzip压缩,提供gzip压缩的JS文件。
   RewriteCond %{HTTP:Accept-encoding} gzip
   RewriteCond %{REQUEST_FILENAME}\.gz -s
   RewriteRule ^(.*js_[a-zA-Z0-9-_]+)\.js$ $1\.js\.gz [QSA]

   # 提供正确的内容类型,并防止双重压缩。
   RewriteRule \.css\.gz$ - [T=text/css,E=no-gzip:1,E=no-brotli:1]
   RewriteRule \.js\.gz$ - [T=text/javascript,E=no-gzip:1,E=no-brotli:1]

   <FilesMatch "(\.js\.gz|\.css\.gz)$">
     # 提供正确的编码类型。
     Header set Content-Encoding gzip
     # 强制代理缓存gzip和非gzip的css/js文件分开。
     Header append Vary Accept-Encoding
   </FilesMatch>
 </IfModule>
</IfModule>

# 各种头部修复。
<IfModule mod_headers.c>
 # 禁用内容嗅探,因为它是一个攻击向量。
 Header always set X-Content-Type-Options nosniff
 # 禁用Proxy头,因为它是一个攻击向量。
 RequestHeader unset Proxy
</IfModule>
解释
保护文件和目录:保护特定文件类型不被访问。
不显示目录列表:防止显示目录内容。
默认处理程序:设置默认的索引文件。
SVGZ编码:为SVGZ文件设置正确的MIME类型和编码。
PHP设置:配置PHP设置,确保安全。
缓存控制:设置缓存策略。
回退资源:如果未启用mod_rewrite,设置回退资源。
重写规则:各种重写规则,包括隐藏目录、规范化URL、gzip压缩文件处理等。
头部修复:设置安全相关的HTTP头。
这些设置有助于增强Drupal网站的安全性和性能。

  • 登录或注册以发表评论
内容类型分类
技术文章
文章归类
drupal cms

文章标签

  • Drupal

评论

文章标签

CSS
Excel
ubuntu
php
vim
五笔
Linux
VPN
command
HTML
drupal 8
drupal 7
centos
composer
Mysql
drush
模块(module)
Drupal
JavaSrcipt
apache
drupal 9
英语
nerdtree
SEO
network
果树种植
surround
drupal10
主题(theme)
ssh
phpmyadmin
yum
二进制
权限
声音
ssl
selinux
HTML5
WireGuard
password
Dreamweaver
DDEV
flameshot
翻译
颜色
uploadprogress
firewalld
kernel
邮件验证
视图(views)
快捷键
gzip
xdebug
错误
电脑基础
ckeditor
C语言
简介
源地址
mbstring
certbot
php扩展
git
csharp
httpd
apt
电子秤
压缩解压
breadcrumb
表单
短信验证
AI
firmware
摄影
diff
superfish
重定向
drupal 11
网站备份
docker
版本号
tagclouds
java
RSS
adsense
电脑技巧
端口
KVM
simple_adsense
算法
youtube
JavaScript
cookie
badblocks
网站运营
计算机基础
RFID
zip
dns
标签优化
VUE
gimp
form
mod_expires 模块
赚钱
ip
http验证
curl
重定向,301
netstat
字段
maven
input
nginx
哈希值
npm
wps
更多

相关文章

  • 因权限问题导致drupal cms 无法正常安装,那么该如何解决这个问题
  • kvm虚拟机启动失败:default网络未激活
  • ubuntu 安装kvm 虚拟机
  • 匿名函数(Anonymous Functions)详解
  • foreach 是 PHP 循环语句使用方法
  • implode() 函数的定义和用法
  • Drupal 11 主题制作教程
  • 检查 Composer 是否为官方源
  • 在 Drupal 中权重(Weight)是怎样排序的
  • 解决 Drupal 主题缺失问题
RSS源

友情链接 网站地图 版权信息 联系我们 网址导航 社区

Copyright © 2019 - 2021 你行网 版权所有  粤ICP备19072650号