如何根据URL模式动态重定向特定的子目录


how do I dynamically redirect specific subdirectories based on URL pattern?

花了几个小时寻找解决方案,但我对htaccess和重定向几乎一无所知。

我的问题是:如何重定向URL的特定部分,而忽略其他部分?

例如http://www.example.com/foo重定向到http://www.example.com/并且CCD_ 3保持原样。

提前感谢!

您可以使用.htaccess文件来完成此操作:

Redirect 301 /foo http://www.example.com

有关.htaccess的更多信息,请查看此专栏。

使用以下进行尝试

RewriteRule ^foo$ http://www.%{HTTP_HOST}/ [R=301,L]

听起来好像你需要某种广义的解决方案。如果是这种情况,您可以使用mod_rewrite进行此操作,前提是该模块已为您的apache安装并启用,或者您自己可以访问apache。

这比简单的重定向功能强大得多,但也更容易射中自己的脚。

它与基于正则表达式重写URL的条件和规则一起工作。

要只重定向(确切地)/foo,您可以定义:

 RewriteRule ^/foo$        http://www.example.com

这将使foo以下的任何都不受影响,甚至/foo/index.html。

要重定向foo下面的任何不包含子目录栏或其他子目录的内容,它看起来像:

RewriteCond %{REQUEST_URI}    !^/foo/(bar|whatever|subdirectories)/
RewriteRule ^/foo(.*)         http://www.example.com/$1      [R=301,L]

RewriteCond检查在REQUEST_URI中是否找不到指定的目录,如果是这种情况,则对foo以下的任何内容应用通用重定向;CCD_ 7在括号CCD_。

规则中的尾随部分[R=301,L]使其行为类似于具有给定HTTP返回代码301的重定向,并使其成为应用的最后一个(L)重定向规则,否则应用进一步的规则可能会产生一些不同的结果。

请参阅http://httpd.apache.org/docs/2.4/mod/mod_rewrite.html

在这里看到这么多错误答案,真是令人惊讶。您只需要精确的正则表达式就可以在这里使用可选的尾部斜杠来针对/foo

您可以在DOCUMENT_ROOT/.htaccess文件中使用此规则:

RedirectMatch 302 ^/foo/?$ /