我在本地LAMP上有以下目录结构:
我可以使用localhost/basic/public/
访问我的索引页面,而我没有使用任何虚拟主机。
现在我想做两件事:
1:而不是localhost/basic/public/
网址应该看起来像localhost/basic/
才能访问主页。
2:应将/api/
的所有请求重定向到router.php
。例如,如果我发出/api/user/login
这样的请求,它应该转到app/router.php
,我可以根据api请求执行特定代码。
为了达到这个目的,我尝试在.htaccess文件中执行类似操作,但它不起作用:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} ^/api/ [NC]
RewriteRule . ../app/router.php [NC,L]
此外,我不确定我们是否可以在RewriteRule
中使用相对路径。
答案 0 :(得分:3)
总结一下,你想要:
此外,您可以将转到/ basic / public / something的请求重定向到/ basic / something
将它放在基本文件夹中的文件.htaccess中:
RewriteEngine On
RewriteBase /preview/
#Special case: api requests
RewriteRule ^api/ app/router.php [L]
#Default case: all public files
#Alternativelly use RewriteCond %{REQUEST_URI} !/basic/public
RewriteCond %{REQUEST_URI} !/public/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ public/$1 [L]
#Optionally prevent both localhost/basic/public/file and localhost/basic/file
#outputting the same
#Using THE_REQUEST trick to only match external requests
RewriteCond %{THE_REQUEST} ^(POST|GET)\ /basic/public/
RewriteRule ^public/(.*)$ $1 [R,L]
这将执行以下操作:
localhost/basic/api/user/something
在内部被重写为localhost/basic/app/router.php
localhost/basic/something
在内部被重写为localhost/basic/public/something
localhost/basic/public/something
从外部重定向到localhost/basic/something
(然后在内部重写)