.htaccess htaccess规则跳过文件和目录,但首先通过匹配前缀进行检查

.htaccess htaccess规则跳过文件和目录,但首先通过匹配前缀进行检查,.htaccess,url-rewriting,.htaccess,Url Rewriting,我使用以下规则,如果已经提供了指向文件的路径,则跳过这些规则 RewriteCond %{REQUEST_FILENAME} -s [OR] RewriteCond %{REQUEST_FILENAME} -l [OR] RewriteCond %{REQUEST_FILENAME} -d RewriteRule ^.*$ - [NC,L] RewriteRule ^$ public/index.php [NC,L] RewriteCond %{REQUEST_URI} !^/public/

我使用以下规则,如果已经提供了指向文件的路径,则跳过这些规则

RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]

RewriteRule ^$ public/index.php [NC,L]

RewriteCond %{REQUEST_URI} !^/public/
RewriteRule ^(.+)$ public/index.php?r=$1 [L,QSA]
但是这让我,去访问像
site.com/public/js/somefile.js这样的文件,这是无意的

我们是否可以检查目录中是否存在文件并重写url,以便以'site.com/js/somfile.js'的形式访问它


显然这不起作用。有什么想法吗?

就在这条规则之前:

RewriteRule ^$ public/index.php [NC,L]
RewriteCond %{DOCUMENT_ROOT}/public%{REQUEST_URI} -f [OR]
RewriteCond %{DOCUMENT_ROOT}/public%{REQUEST_URI} -d
RewriteRule ^(.+)$ /public/$1 [L]
添加此规则:

RewriteRule ^$ public/index.php [NC,L]
RewriteCond %{DOCUMENT_ROOT}/public%{REQUEST_URI} -f [OR]
RewriteCond %{DOCUMENT_ROOT}/public%{REQUEST_URI} -d
RewriteRule ^(.+)$ /public/$1 [L]

第一条规则(与
-
一起通过)应该与存在的文件相匹配。因此,假设
site.com/js/somfile.js
存在,它应该与第一条规则相匹配,并且在不重写的情况下通过。@JonLin文件存在于
public
目录中,该目录不需要public@mrN:你的问题解决了吗?@anubhava,没有,你能帮我吗输出?所以实际文件是
site.com/js/somfile.js
而不是
site.com/public/js/somefile.js
?它被重定向到
site.com/public/js
而且,每个请求都有一个
public/
infront@mrN这里没有做任何重定向的东西,其他的东西在做,除了这个,没有其他htaccess文件s、 我的代码中没有重定向代码。