所以基本上我的 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 文件也被脚本重写了。
答案1
请尝试以下操作:
RewriteEngine On
RewriteRule ^/?app/(css/build/app)-\d+(\.css)$ /fs/current/public/$1$2 [L]
不确定您到底想要什么,但这会在内部将表单的 URL 重写domain.com/app/css/build/app-23471942834.css
为/fs/current/public/css/build/app.css
。
如果需要在重写之前检查目标文件是否存在,那么您可以添加状况之前RewriteRule
(虽然我不确定你为什么需要这样做,因为无论如何你都会得到 404)。例如:
RewriteCond %{DOCUMENT_ROOT}/fs/current/public/$1$2 -f
更新#1:来自评论...
我需要重写任何非文件的内容
啊,好吧,这更有意义了。你可以RewriteCond
用下面的命令替换上面的指令:
RewriteCond %{REQUEST_FILENAME} !-f
仅RewriteRule
当请求的 URL 确实不是匹配文件系统上的文件。
更新#2:来自更新的问题...
更通用的解决方案是,在现有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