我有一个.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
有人可以帮助我吗
答案 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
。