Назад | Перейти на главную страницу

Перенаправление Apache mod_rewrite с префиксом

Я новичок в Apache mod_rewrite и мне трудно заставить его делать то, что я хочу.

В моем статическом каталоге у меня есть файлы javascript (.js) с двумя видами имени файла:

  1. xxxx.js стандартное имя файла
  2. AT_xxxx.js (с префиксом имени файла), который был дублирован из предыдущего стандартного имени файла, но также содержит мои настройки

Я хотел бы проанализировать запросы для каждого стандартного запрошенного файла javascript (xxxx.js), чтобы проверить, существует ли настроенный файл (AT_xxxx.js), включая все подкаталоги. Затем, в этом случае, используйте пользовательский файл вместо стандартного файла (возможно, путем внутреннего перенаправления).

Я пытался понять это часами, но все равно что-то не так.

Примечание: Кроме того, я не знаю, как найти пользовательские файлы в подкаталогах.

DocumentRoot "/data/apps/dev0/custom/my_static"

<filesMatch "\\.(js)$">
  Options +FollowSymLinks
  RewriteEngine  on    
  RewriteCond %{DOCUMENT_ROOT}/AT_$1.js -f
  RewriteRule ^(.*[^/])/?$ %{DOCUMENT_ROOT}/AT_$1.js [QSA,L]
</filesMatch>

В вашем RewriteCond есть обратная ссылка (1 доллар США). Но для того, чтобы использовать обратную ссылку, вам сначала нужно что-то записать и вставить. Попробуйте что-то вроде этого:

RewriteCond %{REQUEST_URI} ^/(.*).js$
RewriteCond %{DOCUMENT_ROOT}/AT_%1.js -f
RewriteRule ^(.*[^/])/?$ %{DOCUMENT_ROOT}/AT_$1.js [QSA,L]

Что происходит выше, так это то, что первое условие проверяет, заканчивается ли запрошенный URI на .js, и если да, сохраняет имя файла (до .js) в обратной ссылке RewriteCond% 1. Затем второй проверяет, существует ли имя файла (хотя и начинается с AT_), и, если да, перезаписывает его.

Я нашел это:

 <filesMatch "\\.(js)$">
    # Split into two variables, $1 is everything before the filename, $2 the filename without extension
    RewriteCond %{REQUEST_FILENAME} ^(.+)/([^/]+)\.js$

    # Add AT_ prefix and check if file exists
    RewriteCond %1/AT_%2.js -f

    # Internal Redirect with new file with AT_ prefix
    RewriteRule  ^(.+)/([^/]+)\.js$ %1/AT_%2.js [NC,L]
 </filesMatch>