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

Php 如何根据URL模式动态重定向特定子目录?,php,apache,.htaccess,redirect,Php,Apache,.htaccess,Redirect,花了几个小时寻找解决方案,但我对htaccess和重定向几乎一无所知 我的问题是:如何重定向URL的特定部分,而忽略其他部分 e、 g。http://www.example.com/foo 重定向到http://www.example.com/ 和http://www.example.com/foo/bar 保持原样 提前谢谢 您可以使用.htaccess文件执行此操作: Redirect 301 /foo http://www.example.com 有关.htaccess的更多信息,请签出

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

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

e、 g。http://www.example.com/foo 重定向到http://www.example.com/ 和http://www.example.com/foo/bar 保持原样


提前谢谢

您可以使用.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检查在请求URI中是否找不到指定的目录,如果是这种情况,则对foo下面的任何内容应用常规重定向;$1包含正则表达式在括号内捕获的内容。*

规则中的尾随PAR[R=301,L]使得它表现为与给定HTTP返回代码301重定向,并使其成为最后一个L重定向规则,否则应用其他规则会产生一些不同的结果。


看到这里有这么多不正确的答案,真是令人惊讶。在这里,您只需要使用带有可选尾部斜杠的精确正则表达式来指向/foo

您可以在文档\u ROOT/.htaccess文件中使用此规则:

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