所以基本上我有一个链接在我的html domain.com/app/css/build/app-23471942834.css然而在服务器上的文件实际上住在/fs/current/public/css/build/app-23471942834.css 。 有没有办法检查一个文件是否存在于RewriteCondition ? 问题是,我基本上需要/css/build/app-23471942834.css部分检查,没有/app 。 有没有办法在一个条件中删除这个?
所以我需要:
domain.com/app/login被重写为/fs/current/public/login domain.com/app/build/css/app-123523.css被重写为/fs/current/public/build/css/app-123523.css domain.com/app/build/js/app-123523.js被重写为/fs/current/public/build/js/build/app-123523.css 我正在使用Laravel,所以在我的public目录中,默认情况下有另一个.htaccess :
<IfModule mod_rewrite.c> <IfModule mod_negotiation.c> Options -MultiViews </IfModule> RewriteEngine On # Redirect Trailing Slashes If Not A Folder... RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)/$ /$1 [L,R=301] # Handle Front Controller... RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ index.php [L] # Handle Authorization Header RewriteCond %{HTTP:Authorization} . RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] </IfModule>
对不起,但我真的很喜欢htaccess文件。 谢谢你的帮助。
我到目前为止:
RewriteCond %{HTTP_HOST} ^(www.)?domain.de$ [NC] RewriteCond %{DOCUMENT_ROOT}/fs/current/public/$1 -f RewriteRule ^app/(.*)$ /fs/current/public/$1 [L] RewriteCond %{HTTP_HOST} ^(www.)?domain.de$ [NC] RewriteRule ^app/(.*)$ /fs/current/public/index.php?/$1 [L]
解:
我解决了我的问题,如下所示:
RewriteCond %{HTTP_HOST} ^(www.)?domain.de$ [NC] RewriteCond %{REQUEST_URI} \.(css|jpg|gif|png|js|svg) RewriteRule ^app/(.+)$ /fs/current/public/$1 [L]
所以所有的重写只适用于css / jpg / gif / png / js / svg我想我之前遇到的问题是index.php文件也被脚本重写了。
尝试以下操作:
RewriteEngine On RewriteRule ^/?app/(css/build/app)-\d+(\.css)$ /fs/current/public/$1$2 [L]
不确定你到底是什么,但是这将在内部重写一个formsdomain.com/app/css/build/app-23471942834.css到/fs/current/public/css/build/app.css的URL。
如果你需要在重写之前检查目标文件是否存在,那么你可以在RewriteRule之前添加一个条件 (虽然我不确定为什么你需要这样做,因为你会得到一个404)。 例如:
RewriteCond %{DOCUMENT_ROOT}/fs/current/public/$1$2 -f
更新#1:从评论…
我需要重写任何不是文件的东西
好的,这样做更有意义。 您可以用以下代替上面的RewriteCond指令:
RewriteCond %{REQUEST_FILENAME} !-f
如果请求的URL与文件系统上的文件不匹配,那么只会处理下面的RewriteRulereplace。
更新#2:从更新的问题…
一个更通用的解决scheme,在现有的RewriteEngine指令之后,在.htaccess中尝试以下内容:
RewriteCond %{DOCUMENT_ROOT}/fs/current/public/$1 -f RewriteRule ^app/(.+)$ /fs/current/public/$1 [L]
如果在<document-root>/fs/current/public/css/build/app-23471942834.css或<document-root>/fs/current/public/login存在一个文件,这将只重写请求文件系统。