.htaccess 以其他方式重定向与目录匹配的url

.htaccess 以其他方式重定向与目录匹配的url,.htaccess,directory,.htaccess,Directory,我经常使用重定向,但尽管搜索,我还是无法实现我的目标 我想要达到的目标: 对/aaaa的请求重定向到/articles/aaaa.php 但只在浏览器中显示/aaaa(这已经运行多年了) 对目录/bbbb的请求必须重定向到/products/bbbb/index.php(但仅在浏览器中显示/bbbb)* 这就是我现在使用的: RewriteRule ^([a-z0-9-_]+)$ /articles/$1.php [NC,L] *如果太复杂,也可以这样做:对/bbbb的请求(这是一个不存在

我经常使用重定向,但尽管搜索,我还是无法实现我的目标

我想要达到的目标:

  • /aaaa
    的请求重定向到
    /articles/aaaa.php
    但只在浏览器中显示
    /aaaa
    (这已经运行多年了)

  • 对目录
    /bbbb
    的请求必须重定向到
    /products/bbbb/index.php
    (但仅在浏览器中显示
    /bbbb
    )*
这就是我现在使用的:

RewriteRule ^([a-z0-9-_]+)$ /articles/$1.php [NC,L]

*如果太复杂,也可以这样做:对/bbbb的请求(这是一个不存在同名文件的目录)重定向到/products/bbbbbb(在/products/bbbb目录中,我将使用local.htaccess从那里获取它,并将其重定向到index.php)仍在浏览器中/bbbb应显示。

当重写到
/articles
目录中的文件时,可以先检查它是否存在(作为文件)。例如:

RewriteCond %{DOCUMENT_ROOT}/articles/$1.php -f
RewriteRule ^([a-z0-9-_]+)$ /articles/$1.php [L]
我还删除了
NC
标志,除非您明确需要它

同样,要在内部重写到目录,请执行以下操作:

RewriteCond %{DOCUMENT_ROOT}/products/$1/index.php -f
RewriteRule ^([a-z0-9-_]+)$ /products/$1/index.php [L]

这实际上是检查
index.php
文件是否存在,而不是父目录,因为您最终将重写为一个文件,而不是一个目录。

“请求
/bbbbbb
这是一个目录”-尽管我假设
/bbbb
实际上不是文件系统上的目录,但是如果存在,应该在内部重写到
/products
目录中同名的目录?实际上,BBBBBB是fs中的一个目录,因此有一个目录/products/BBBBBB