.htaccess重写规则工作不正常。重定向到绝对路径

.htaccess重写规则工作不正常。重定向到绝对路径,.htaccess,mod-rewrite,url-rewriting,.htaccess,Mod Rewrite,Url Rewriting,我在server.com/site\u admin/api中有一个.htaccess(实际目录结构:/public\u html/site\u admin/api) 我想将所有请求定向到相应的php文件。因此api/users将重写为api/users.php 所以我写了这个规则: RewriteEngine On RewriteRule ^(.*)$ $1.php 但它不起作用。当我访问url server.com/site\u admin/users时,我得到一个404 当我给它加上

我在server.com/site\u admin/api中有一个.htaccess(实际目录结构:/public\u html/site\u admin/api)

我想将所有请求定向到相应的php文件。因此api/users将重写为api/users.php

所以我写了这个规则:

 RewriteEngine On
 RewriteRule ^(.*)$ $1.php 
但它不起作用。当我访问url server.com/site\u admin/users时,我得到一个404

当我给它加上一个[R=301]时

 RewriteRule ^(.*)$ $1.php [R=301]
我发现它重定向到 而不是

有人能帮我一下吗?用这个:

RewriteEngine On
RewriteCond %{REQUEST_URI} !php$
RewriteRule ^(.*)$ $1.php
您的url不起作用,因为重写的url仍然与
(.*)
匹配,因此它将再次重写它,直到导致错误。但奇怪的是它给你的是404而不是500

第二个不起作用,因为
[R]
生成了一个新的GET请求,所以您需要添加主机,否则它将请求到定义主机的绝对路径,显然,它将不起作用。如果要使用[R],应使用:

RewriteRule^(.*)$http://server.com/site_admin/api/$1.php[R]


但这并不能解决你的问题。正如我所说,它将生成一个新的GET请求,
.php
将对您的用户可见。

不起作用。即使我直接重写:RewriteRule^users$users,它也不起作用。php@SomeshMukherjee,等等。。。我更好地阅读了你的问题,我发现你在server.com/site\u admin/api中有.htaccess,你正在试图重写server.com/site\u admin/user页面。这是对的还是错的?如果正确,您应该在server.com/site_admin.nope上移动.htaccess。我想重定向api/用户。我想做的就是去掉.php扩展名,重点是:它为什么重定向到/home/public等等。它决不应该走绝对的道路。我能理解它是否进入了无限重定向,但为什么要重定向到一个完全不同的位置呢directory@SomeshMukherjee真奇怪。它在我的服务器上运行良好:。您的httpd.conf中是否有
AllowOverride All
(如果您有权访问)?