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

时间:2012-07-05 16:50:18

标签: .htaccess mod-rewrite url-rewriting

我有一个.htaccess放在server.com/site_admin/api(实际目录结构:/ public_html / site_admin / api)

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

所以我写了这条规则:

 RewriteEngine On
 RewriteRule ^(.*)$ $1.php 

但它不起作用。当我访问url server.com/site_admin/users

时,我得到404

当我添加[R = 301]

 RewriteRule ^(.*)$ $1.php [R=301]

我发现它重定向到http://server.com/home/server_user/public_html/site_admin/api/users.php 而不是http://server.com/site_admin/api/users.php

有人可以帮助我吗

1 个答案:

答案 0 :(得分:2)

使用此:

RewriteEngine On
RewriteCond %{REQUEST_URI} !php$
RewriteRule ^(.*)$ $1.php

你的工作不起作用,因为重写的网址仍与(.*)匹配,因此它会再次重写,直到导致错误。但奇怪的是它给你一个404而不是500 ......

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

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

但它不能解决你的问题。正如我所说,它会生成一个新的GET请求,并且您的用户可以看到.php