如何使用 htaccess 将所有子文件重定向到 link 目录中的主 link

How to redirect all subfiles to main link in link directory with htaccess

您好,我有 link 个这样的目录:

www.example.com/a-letter/a-1

www.example.com/a-letter/a-2

www.example.com/a-letter/a-3

我使用以下代码从 link 中删除了 a-letter 文件夹名称:

RewriteCond %{THE_REQUEST} /a-letter/ [NC]
RewriteRule ^a-letter/(.*)$ / [L,R=301,NC,NE]

我想重定向 all a-1 a-2a-3 文件夹下的 a-letter 文件,如下所示一个 htaccess 代码

www.example.com/a-1
www.example.com/a-2
www.example.com/a-3

因为我为每个 link 使用此代码,我想为此使用一个代码。我如何指定所有文件的代码

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^a-1$ /a-letter/a-1.html [L]
</IfModule>

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^a-2$ /a-letter/a-2.html [L]
</IfModule>

如果你能帮助我,我将不胜感激。

这可能就是您要找的:

RewriteEngine on

RewriteRule ^/?a-letter/(.*)(/|\.html)?$ / [R=301,L]

RequestCond %{DOCUMENT_ROOT}/a-letter%{REQUEST_URI}.html -f
RewriteRule ^/?(a-1|a-2)/? /a-letter/.html [END]

另一种方法是,如果名称方案类似于“a-.html”:

RewriteEngine on

RewriteRule ^/?a-letter/(.*)(/|\.html)?$ / [R=301,L]

RequestCond %{DOCUMENT_ROOT}/a-letter%{REQUEST_URI}.html -f
RewriteRule ^/?a-(\d+)/? /a-letter/a-.html [END]

我个人不使用那些 <IfModule mod_rewrite.c> 条件...是的,这可能会正式防止内部服务器错误。但这有什么帮助?

  1. 在不应用这些规则的情况下运营您的网站很可能没有多大意义。
  2. 你有没有安装重写模块你就知道了。而且您很可能不会经常更改。

更新:

在评论中你问了另一个问题(再次:请在以后打开一个单独的问题来单独提问......)。我会建议这样的实施:

RewriteEngine on 

RewriteRule ^/?a-letter/(.*)(/|\.html)?$ / [R=301,L]
RewriteRule ^/?comments/a/(.*)(/|\.html)?$ / [R=301,L] 

RequestCond %{DOCUMENT_ROOT}/a-letter%{REQUEST_URI}.html -f
RewriteRule ^/?a-(\d+)/? /a-letter/a-.html [END]

RequestCond %{DOCUMENT_ROOT}/comments/a%{REQUEST_URI}.html -f 
RewriteRule ^/?(.*)/? /comments/a/.html [END]

您的指令看起来不错,您 运行 可能遇到的问题是指令的顺序。始终记住指令是从上到下处理的。您的最后一个 RewriteRule 非常通用,它将匹配 anything 。始终将更通用的规则放在底部,将更精确的例外放在最上面。并且总是尝试修改规则,使它们不那么通用:

所以不用

RewriteRule ^/?(.*)/? /comments/a/.html [END]

可能是这样

RewriteRule ^/?(\w*)/? /comments/a/.html [END]

可以吗?