正如我在this question中提到的那样,我成功地将/public
文件夹重写为根网址。因此,如果我访问localhost
或localhost/public
,则apache会将我重定向到/public
并将其隐藏在网址中。总而言之,我是这样做的:
RewriteEngine on
RewriteCond %{THE_REQUEST} /public/([^\s]+) [NC]
RewriteRule ^ /%1 [NC,L,R]
RewriteCond %{REQUEST_URI} !^/public
RewriteRule ^(.*)$ /public/$1 [NC,L,QSA]
但是这样一切都会被重定向到子文件夹/public
。我需要保留或添加一些例外,以处理不在/public
文件夹中的某些子目录。
+---assets
+---images
\---jp-pattern.jpg
+---javascripts
+---stylesheets
+---template
+---public
\---products
我需要保留资产,图片,javascripts,样式表和模板文件夹。我需要它们例如localhost/images
等等。
我首先尝试使用images文件夹:
RewriteCond %{REQUEST_URI} !^/images [NC]
或
RewriteCond %{REQUEST_URI} !^/images/?$ [NC]
或
RewriteCond %{REQUEST_URI} !/images [NC]
但它们都没有奏效。浏览器总是返回此消息:
Not Found
The requested URL /public/images/jp-pattern.jpg was not found on this server.
这意味着我无法添加例外。
如何添加这些例外?
答案 0 :(得分:1)
您可以在RewriteEngine on
之后直接添加此块:
RewriteCond %{REQUEST_URI} ^/(images|javascripts|stylesheets|template)/ [NC]
RewriteRule ^ - [L]
这表示如果请求以这些目录中的任何一个开头,请不要重写。使用L
标志可以检查最后一条规则。
但是,我建议您实际进行存在检查。您的HTML可能会请求现有文件,因此它会跳过public
检查。
RewriteCond %{REQUEST_URI} !^/public
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /public/$1 [NC,L,QSA]