Php htaccess重定向不工作

Php htaccess重定向不工作,php,apache,.htaccess,mod-rewrite,redirect,Php,Apache,.htaccess,Mod Rewrite,Redirect,所以我有一个htaccess条目: RedirectMatch /([a-zA-Z0-9]+).php /dirA/$1.php 目标是根目录中的任何.php都应该重定向到/dirA/*.php 假设我提出这个要求 domain.com/something.php 它应该改为重定向到 domain.com/dirA/something.php 但是,当我将该条目放入.htaccess文件,然后转到domain.com/something.php时 它反而返回 “页面未正确重定向 Firefox

所以我有一个htaccess条目:

RedirectMatch /([a-zA-Z0-9]+).php /dirA/$1.php
目标是根目录中的任何.php都应该重定向到/dirA/*.php

假设我提出这个要求

domain.com/something.php

它应该改为重定向到

domain.com/dirA/something.php

但是,当我将该条目放入.htaccess文件,然后转到domain.com/something.php时

它反而返回

“页面未正确重定向

Firefox检测到服务器正在重定向请求 这个地址永远不会完整。”

你知道如何修改我的htaccess来完成我想做的事情吗

更新问题 还有一种方法可以使它仅在文件不在根目录中时重定向…因此,如果x.php在根目录中存在,则为该x.php提供服务,否则重定向到dirA/x.php

RewriteEngine On

RewriteRule ^([a-zA-Z0-9]+).php /dirA/$1.php [R=301,L]

这个应该很好



重写规则^(.*)$/subdir/$1
mod_rewrite是一种过分的做法,因为您使用了
RedirectMatch
。但是,您的规则有点错误:regex
/([a-zA-Z0-9]+).php
匹配包含指定子字符串的所有字符串,因此它匹配“/foo/bar/baz.php”,但也匹配“dirA/foo/bar.php”(甚至“/foo/bar.php/baz.php”I.由于没有停止条件,您的重定向以无休止的循环结束:/dirA/foo.php被重定向到/dirA/foo.php

您可以通过在正则表达式中使用以下命令来纠正这种情况:

RedirectMatch ^/([a-zA-Z0-9]+).php$ /dirA/$1.php
至于你的第二个问题:这可能确实需要重写mod_

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^([a-zA-Z0-9]+).php$ /dirA/$1.php [R=301]

我还没有测试过它,但这应该可以让你开始了。确保查看详细信息,或者只是四处搜索,因此,关于这一点有很多问题。

所以我这样做了,它重定向到/dirA/something.php,这很好,但是当我将dirA更改到自己的目录并保存htaccess时,它仍然重定向到dirA…有什么问题吗思想?