You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

群晖NAS托管网站RewriteRule不生效问题求助

群晖DS216 Apache RewriteRule 不生效的排查与解决

1. 启用mod_rewrite模块

群晖默认未开启该模块,需手动配置:

  • 打开DSM控制面板,进入Web服务 > Apache HTTP Server
  • 勾选「启用mod_rewrite」选项,保存后重启Apache服务

2. 放开.htaccess权限限制

群晖Apache默认限制了.htaccess的配置覆盖能力,需修改虚拟主机设置:

  • 找到站点对应的Apache配置文件,路径一般为/usr/local/etc/apache2/sites-enabled/你的站点配置.conf
  • 在<Directory "/volume1/web/你的站点目录">段落中,将AllowOverride None修改为AllowOverride All,示例如下:
    <Directory "/volume1/web/your-site">
        Options FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>
    
  • 修改完成后重启Apache服务

3. 修正.htaccess规则配置

原规则存在顺序不合理、重复开启引擎、缺少终止标志的问题,替换为以下配置:

ErrorDocument 404 /404.php
<IfModule mod_rewrite.c>
    RewriteEngine On

    # 优先强制HTTPS跳转
    RewriteCond %{HTTPS} off
    RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

    # 移除URL中的index.php
    RewriteCond %{THE_REQUEST} ^GET.*index\.php [NC]
    RewriteRule (.*?)index\.php/*(.*) /$1$2 [R=301,NE,L]

    # 页面重写,添加[L]标志终止后续规则执行
    RewriteRule ^experience/?$ experience.php [L]
    RewriteRule ^development/?$ development.php [L]
    RewriteRule ^portfolio/?$ portfolio.php [L]
</IfModule>
  • 将HTTPS跳转放在最前,避免重写后跳转引发的逻辑混乱
  • 给每个页面重写规则添加[L]标志,匹配成功后不再执行后续规则
  • 删除重复的RewriteEngine On声明

4. 清除缓存测试

之前的301跳转可能被浏览器缓存,建议用隐私模式访问站点,或手动清除浏览器缓存后再测试

5. 检查文件与权限

  • 确认experience.php等文件存在于网站根目录,且文件名大小写与规则一致(群晖基于Linux,文件系统大小写敏感)
  • 设置文件权限为644、目录权限为755,确保Apache进程拥有读取权限

内容的提问来源于stack exchange,提问作者Zen777

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 07:43:18