так что в основном у меня есть ссылка в моем html domain.com/app/css/build/app-23471942834.css
, однако на сервере файл фактически находится в /fs/current/public/css/build/app-23471942834.css
. Есть ли способ проверить, существует ли файл в RewriteCondition
? Проблема в том, что мне в основном нужна часть /css/build/app-23471942834.css
для проверки, без / app
. Есть ли способ удалить это в состоянии?
Итак, мне нужно:
домен. 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]
Не уверен, что именно вам нужно, но это позволит внутренне переписать 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
UPDATE#1: Из комментариев...
Мне нужно будет переписать все, что не является файлом
Хорошо, это имеет больше смысла. Вы можете заменить приведенную выше директиву RewriteCond
на следующую:
RewriteCond %{REQUEST_FILENAME} !-f
которая будет обрабатывать следующую замену RewriteRule
только в том случае, если запрошенный URL не совпадает с файлом в файловой системе.
UPDATE#2: Из обновленного вопроса...
Более общее решение, после существующей директивы RewriteEngine
, попробуйте следующее в . htaccess:
RewriteCond %{DOCUMENT_ROOT}/fs/current/public/$1 -f
RewriteRule ^app/(.+)$ /fs/current/public/$1 [L]
Это перезапишет запрос только в том случае, если файл формы
или
существует в файловой системе.