将脚本移动到子文件夹时出现 htaccess 语法问题

将脚本移动到子文件夹时出现 htaccess 语法问题

我最近购买了一个脚本,但该脚本仅在 public_html 文件夹中有效。我需要将其安装在名为 shop 的子文件夹中(public_html/shop/)。现在,当脚本放在 public_html 中时,以下 .htaccess 规则可以完美运行,但一旦我将其移动到 shop 文件夹,一切都会停止运行。我应该如何编辑以下 htaccess 规则以使其在 /shop 文件夹中运行?

Options All -Indexes

<IfModule mod_rewrite.c>
Options +FollowSymLinks
RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !(template/)
RewriteRule . /index.php [L]

答案1

RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !(template/)
RewriteRule . /index.php [L]

为了使其在子目录中发挥作用,您需要:

  • 完全删除该RewriteBase指令。(反正目前它也没被使用。)
  • 删除代换最后一条规则中的字符串。

此外:

  • 最后的括号状况RewriteCond指令)是多余的。而这状况应该是第一个,而不是最后一个(为了优化)。
  • 包装<IfModule>是多余的,应该删除。(假设您还有一个结束</IfModule>“标签”?)
  • Options +FollowSymLinks考虑到前面的Options All指令也是多余的。
  • RewriteRule 图案在 HTTP 到 HTTPS 重定向(即(.*))中不需要被捕获。

综合以上几点,我们可以得出:

Options All -Indexes

RewriteEngine on

RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

RewriteRule ^index\.php$ - [L]

RewriteCond %{REQUEST_URI} !template/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php [L]

无论脚本安装在哪个目录(根目录或子目录),它都可以工作。

相关内容