我最近购买了一个脚本,但该脚本仅在 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]
无论脚本安装在哪个目录(根目录或子目录),它都可以工作。