Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache htaccess重写规则以从URL中删除多个子文件夹_Apache_.htaccess_Mod Rewrite_Redirect_Rewrite - Fatal编程技术网

Apache htaccess重写规则以从URL中删除多个子文件夹

Apache htaccess重写规则以从URL中删除多个子文件夹,apache,.htaccess,mod-rewrite,redirect,rewrite,Apache,.htaccess,Mod Rewrite,Redirect,Rewrite,由于文件系统子目录的限制,我很可能会遇到我想将/users文件夹分为/users/a/username,/users/b/username,/users/c/username,等等 因此,服务器上用户的数据将位于: www.domain.com/users/a/username/,www.domain.com/users/b/username/,等等 我希望URL为: www.domain.com/users/username/ 或者,为了避免重复内容,从www.domain.com/users

由于文件系统子目录的限制,我很可能会遇到我想将
/users
文件夹分为
/users/a/username
/users/b/username
/users/c/username
,等等

因此,服务器上用户的数据将位于:
www.domain.com/users/a/username/
www.domain.com/users/b/username
/,等等

我希望URL为:
www.domain.com/users/username/

或者,为了避免重复内容,从www.domain.com/users/a/username/到
www.domain.com/users/username/
的301重定向也很好

目前,我有一个单一的子目录重写(见下文),但我很困惑如何才能有效地完成所有字母顺序的子目录

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^users/(.*)$ users/a/$1 [L,NC]

我已经检查了这个网站,所有的网站似乎都隐藏了第一个子目录,例如
domain.com/folder1/filename.html
=>
domain.com/filename.html
,但没有更深入的内容。

将此代码放在你的htaccess中(必须在根文件夹中)


你是怎样得到字母a或b的。。。当您有
domain.com/users/username/
要重写时?它和用户的第一个字母对应吗?是的,我应该说得更清楚。你的一些评论有误,选择
以避免重复内容,从www.domain.com/users/a/username/到www.domain.com/users/username/的301重定向也很好。
似乎是另一个方向…URL的“我想要索引”没有a-z子文件夹。抱歉,我对重写规则的理解是基本的。username1子文件夹是如何分布的?按第一个字符?您的第一条规则不会重定向/users/a/username1/ddd中的所有文件,还是我错了?@MrTux您是对的,但这不是本文的目标。当到达
/users/a/username
时,无论后面是否有内容,它都会重定向到
/users/username
嗯,我不确定OP是否想要这样做;)谢谢,我非常理解这一点,但奇怪的是,即使在删除HTAccess中的其他行之后,它也会导致重定向循环。当我在另一个浏览器中测试时,它工作得很好,当我重新启动时,它在Chrome中运行得很好。再次感谢,这是非常有用的,我在这里的其他地方找不到。
Options -Indexes -MultiViews

RewriteMap lowercase int:tolower    # this line in your apache file configuration
RewriteEngine On

RewriteCond %{THE_REQUEST} \s/users/[a-z]/([^/\s]+)\s
RewriteRule . /users/%1/? [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^users/([A-Za-z])([^/]+)/$ /users/${lowercase:$1}/$1$2/ [L]