如何使用 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-2
和 a-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>
条件...是的,这可能会正式防止内部服务器错误。但这有什么帮助?
- 在不应用这些规则的情况下运营您的网站很可能没有多大意义。
- 你有没有安装重写模块你就知道了。而且您很可能不会经常更改。
更新:
在评论中你问了另一个问题(再次:请在以后打开一个单独的问题来单独提问......)。我会建议这样的实施:
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]
可以吗?
您好,我有 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-2
和 a-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>
条件...是的,这可能会正式防止内部服务器错误。但这有什么帮助?
- 在不应用这些规则的情况下运营您的网站很可能没有多大意义。
- 你有没有安装重写模块你就知道了。而且您很可能不会经常更改。
更新:
在评论中你问了另一个问题(再次:请在以后打开一个单独的问题来单独提问......)。我会建议这样的实施:
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]
可以吗?