преобразовать правило перезаписи web.config в правило перезаписи htaccess (все файлы без расширения будут обрабатываться как .cfm)

Я перемещаю сайт с IIS 7 на Apache 2.4 и имею следующее правило перезаписи web.config. У меня возникли проблемы с преобразованием в .htaccess. Правило, по сути, позволяет использовать чистые (полезные для SEO) URL-адреса путем перезаписи всех файлов без расширения с расширением .cfm (например, www.mydomain/bag перезаписывается на сервере как www.mydomain.com/bag.cfm. Рабочее правило в веб- .config показан ниже

<rule name="Rewrite all non extension requests to .cfm" stopProcessing="true">
      <match url="^(.*)$" />
      <conditions logicalGrouping="MatchAll">
        <add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" negate="true" />
        <add input="{REQUEST_FILENAME}.cfm" matchType="IsFile" ignoreCase="false" />
      </conditions>
      <action type="Rewrite" url="{R:1}.cfm" />
    </rule>

Я пробовал все похожие сообщения, которые я мог найти здесь, и, к сожалению, ни один из них не работал для меня. Я использую Lucee 5.0 на CentOS 7 (Apache 2.4), если это имеет значение. Мы будем очень признательны за любые рекомендации.


person Dave S    schedule 28.11.2016    source источник
comment
Вы должны иметь возможность настроить этот ответ для использования .cfm вместо .html: stackoverflow.com/questions/5745490/   -  person Jordan    schedule 30.11.2016
comment
Спасибо, да, я пробовал это раньше без везения. Я думаю, что это может быть как-то связано с файлом .cfm, который проксируется через tomcat после Apache. Когда я использую ссылку, которую вы предлагаете, я, кажется, приближаюсь, так как когда я включаю ведение журнала, я вижу следующее. strip per-dir prefix: /home/domain/public_html/bag.cfm -> bag.cfm applying pattern '^(.*)$' to uri 'bag.cfm' pass through /home/domain/public_html/bag.cfm Negotiation: discovered file(s) matching request: /home/domain/public_html/bag (None could be negotiated).   -  person Dave S    schedule 01.12.2016
comment
К тому времени, когда будет достигнут htaccess, уже слишком поздно делать перезапись с не-.cfm на .cfm.   -  person Kevin B    schedule 02.12.2016
comment
Где тогда нужно было бы переписать?   -  person Dave S    schedule 02.12.2016


Ответы (1)


Я действительно не знаю о Tomcat; Я предполагаю, что вам нужен Apache, потому что Tomcat не годится для обслуживания вашего контента без сценария.

Вы можете настроить их так, чтобы они оба имели один и тот же корень документа, поэтому имели совпадающие URL-адреса, но чтобы Tomcat прослушивал другой порт и не открывал этот порт извне. Затем вы можете проксировать запросы для (скрытых) cfm файлов следующим образом:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME}.cfm -f
RewriteCond %{THE_REQUEST} ^\S++\s++([^?\s]++)(\?\S*)?
RewriteRule ^ http://127.0.0.1:8080%1.cfm%2 [NS,NE,P]
RewriteRule (?<=.cfm)$ http://127.0.0.1:8080/404.cfm [NS,NE,P]

Второе правило — это пример того, как сделать вид, что файлов cfm нет, если запросить напрямую.

Вам потребуется включить соответствующие прокси-модули.

person Walf    schedule 22.12.2016