将 Web 根目录内容移动到子目录时使用 .htaccess ModRewrite 吗?

将 Web 根目录内容移动到子目录时使用 .htaccess ModRewrite 吗?

我正在清理和重新整理服务器上的文件(基本共享托管情况),并正在深入研究 .htaccess 以进行此操作。我正在将 Web 根目录中的内容移动到 /design/v5/ 的子目录中,并尝试使用 RewriteRule 和 RedirectMatch 使以下两种方案发挥作用:

#-------------------------
#Redirect root url to subdirectory
#   1.  Visits: DOMAIN.TLD/*
#       Served: DOMAIN.TLD/design/v5/*
#
#   2.  Visits: DOMAIN.TLD/design/v5/*
#       Redirected: DOMAIN.TLD/*
#-------------------------

RewriteRule ^/(.*)$ /design/v5/$1 [L,R]
RedirectMatch 301 ^/design/v5/(.*)$ /(.*)$1

正如各位 Apache 专业人士所看到的,我把一些东西搞得一团糟,但却不知道在哪里以及如何搞砸了(目前,我正在阅读这里和其他网站上的类似问题的大量参考资料……我们这些设计师/前端人员可能相当愚钝)。

此外,我还想在这里完成两件事:

  1. 在我的编码中维护相对 URL
  2. 让重定向/重写级联到 /design/v5/ 自己的子目录中。
  3. 如果我可以将这些子目录分组放在括号中,如 (includes|img|scripts|style),或者让所有内容使用通配符,而不是写出单独的 ReWrite/Redirect 规则集,那就太棒了。
  4. 不会对其他子目录产生重写效果(即 DOMAIN.TLD/lawlz/imonaboat.gif 仍将按书面形式工作,并且不会从 /design/v5/ 定向)。

到目前为止,通过摆弄我的基本设置,我得到了以下三种结果之一:

  1. 我的网站根目录的空白索引目录列表,
  2. 我的网站根目录下的服务器错误页面,
  3. 来自 Web 根目录的损坏版本的浏览器错误页面:http://域名.tld/(。)/(.)/(.)/(.)/(.)/(.)...

深夜更新:

这个 SO 答案在根级别上完美运行,但是不会从子目录重定向[当我导航到 DOMAIN.TLD/design/v5 时,我会重定向到 DOMAIN.TLD/(.*)],并且会由于繁重的重写规则而破坏任何非子域名的目录。

RewriteCond %{THE_REQUEST} ^GET\ /design/comingsoon/
RewriteRule ^design/comingsoon/(.*) /$1 [L,R=301]
RewriteRule !^design/comingsoon/ design/comingsoon%{REQUEST_URI} [L]

答案1

! 在重写规则中是不允许的。

RewriteCond %{THE_REQUEST} ^GET\ /design/comingsoon/
RewriteRule ^design/comingsoon/(.*) /$1 [L,R=301]
RewriteRule ^design/comingsoon/ - [L]
#rewrite to '-' doesn't do anything, but with the L flag the rule(s) below it will never be applied
RewriteRule (.*) design/comingsoon/$1 [L]

相关内容