Apache динамическая перезапись htaccess c база перезаписи - PullRequest
1 голос
/ 09 февраля 2020

Я борюсь с htaccess за производственную и локальную среду. Мой производственный URL выглядит так: https://example.com/folder/file.php Локальный, который я использую: https://example.dev.local/app/folder/file.php

Как вы видите, моя локальная среда использует приложение, которое является подпапкой. Я хочу запретить установку RewriteBase / app /

Так что после поиска я нашел ответы вроде:

RewriteCond %{REQUEST_URI}::$1 ^(.*?/)(.*)::\2$
RewriteRule ^(.*)$ - [E=BASE:%1]

Однако я могу заставить его работать для моей локальной среды. Мой htaccess:

Options -Indexes

RewriteEngine On

# Redirect if not https
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# Urls ends with html
RewriteRule ^(.*).html$ index.php?rt=$1&%{QUERY_STRING} [L,QSA]

# requests which are not static sources will be handled for the admin environment
RewriteCond %{REQUEST_URI} !^admin_cms/\.*\.(jpe?g|css|js|gif|png|woff2?|ttf|ico)$ [NC]
RewriteRule ^admin_cms/?(.*)$ admin.php?rt=$1&%{QUERY_STRING} [L,QSA]

URL-адрес, подобный: https://example.dev.local/app/admin_cms/file.php должен соответствовать для второго правила, но совпадать только тогда, когда я перехожу на URL без приложения.

Итак, мой вопрос: как мне заставить работать оба (prod / local) с одним и тем же htaccess?

Ps. Я пробовал также RewriteRule ^%{ENV:BASE}/admin_cms/?(.*)$ admin.php?rt=$1&%{QUERY_STRING} [L,QSA]

1 Ответ

0 голосов
/ 13 февраля 2020

После копания я нашел решение, которое работало на меня. Возможно, есть и другие решения, пожалуйста, опубликуйте это, чтобы я мог обновить свой ответ с другими возможностями.

Я использовал группу без захвата в моем состоянии и группу захвата в моем правиле.

# requests which are not static sources will be handled for the admin environment
RewriteCond %{REQUEST_URI} !^(?:\/[A-Za-z0-9]+)?/admin_cms/\.*\.(jpe?g|css|js|gif|png|woff2?|ttf|ico)$ [NC]
RewriteRule ^([A-Za-z0-9]+\/)?admin_cms/?(.*)$ $1admin.php?rt=$2&%{QUERY_STRING} [L,QSA]

Чтобы объяснить правила:

RewriteCond

!^(?:\/[A-Za-z0-9]+)?/admin_cms/\.*\.(jpe?g|css|js|gif|png|woff2?|ttf|ico)

  • ! = Не
  • (?: = Создать группу без захвата, которая начинается с / и следует за A-Za-z или цифрой c
  • )? = В конце неперехвата находится знак вопроса, который делает его необязательным, поэтому он может иметь эту группу или не может
  • (jpe? G .... = группа захвата, поэтому он должен содержать это расширение

RewriteRule

^([A-Za-z0-9]+\/)?admin_cms/?(.*)$ $1admin.php?rt=$2&%{QUERY_STRING}
  • Делает первую группу сейчас в качестве захвата, но это необязательно, к нему также добавляется /. / за пределами необязательной группы шаблон не будет работать с root url.
  • Затем для перезаписи мы ставим $ 1 в качестве первой группы в начале
  • $ 2 будет частью, которая будет передано в RT

Это приведет к:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...