我根目录下面的.htaccess文件用于重写所有/ api /,然后从/api/api.php内$ _GET中的URL输出键值对?
如何修改此设置,以使通过此方案访问的api中所有现有文件或文件夹(例如/ api / test或/api/test/file.php)都不会通过重写规则进行重写?
<IfModule mod_rewrite.c>
Options +FollowSymlinks
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/api
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
#RewriteRule (.*) $1
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^(.*/)([^/]+)/([^/]+) $1?$2=$3&%1 [QSA,L]
RewriteCond %{REQUEST_URI} ^/api
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^([^/]+)/ $1/$1.php?%1 [L]
</IfModule>
答案 0 :(得分:1)
您可以使用RewriteCond
指令排除文件和文件夹
RewriteEngine On
#if not a file
RewriteCond %{REQUEST_FILENAME} !-f
#not a directory
RewriteCond %{REQUEST_FILENAME} !-d
#rewrite the /api request
RewriteCond %{REQUEST_URI} ^/api
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^([^/]+)/ $1/$1.php?%1 [L]
答案 1 :(得分:0)
我制作了以下.htaccess文件以包含目录索引和后备资源,并将其放置在根目录中,以捕获来自根的每个请求。
我还放置了rewritebase / api和InheritDown选项来限制我应用这些规则的位置,并递归地传播到已经存在的目录,以便它们(和嵌套文件)在请求时不会包含在重写过程中。
这在$ _GET上产生了成功的结果,条件是在查询字符串中有相等数量的lhs(key)= rhs(value)对,条件是它们在/ api / lhs / rhs / lhs / rhs中输入请求。
<IfModule mod_rewrite.c>
Options +FollowSymlinks
RewriteEngine On
DirectoryIndex api.php
FallbackResource index.php
RewriteCond %{REQUEST_URI} ^/api
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} ^/api
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^(.*/)([^/]+)/([^/]+) $1?$2=$3&%1 [QSA,L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^([^/]+)/ $1/$1.php?%1 [L]
</IfModule>
RewriteBase /api
RewriteOptions InheritDown