Apache Rewrite Engine перенаправляет все запросы на index.php

Apache Rewrite Engine перенаправляет все запросы на index.php

У меня есть веб-приложение PHP на веб-сервере Apache.

Путь к веб-приложению на сервере:/var/www/html/intern/organisation/example_app

URL-адрес веб-приложения:
https://www.example.de/org1/intern/example_app/

Я хочу, чтобы все запросы, например, https://www.example.de/org1/intern/example_app/view1/перенаправлялись на

https://www.example.de/org1/intern/example_app/index.php

На моем локальном сервере XAMPP я использую следующий файл .htaccess, который подходит для этой цели:

RewriteEngine On
RewriteBase /example_app
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$ index.php [L]

Но я понятия не имею, как этот файл должен выглядеть на сервере? Я также использую httpd.conf на сервере. Интересно, не конфликтует ли этот файл с .htaccessфайлом, который лежит ниже:/var/www/html/intern/organisation/example_app/

Есть ли у кого-нибудь идеи, как настроить перезапись на сервере?

решение1

Файл .htaccessв /org1/intern/example_app/подкаталоге должен выглядеть следующим образом:

DirectoryIndex index.php

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php [L]

Затем вы можете использовать этот же .htaccessфайл локально и на работающем сервере, при условии, что он находится в example_app/подкаталоге.

Если .htaccessфайл находится в том же каталоге, что и index.phpфайл, который вы хотите перезаписать, то эта RewriteBaseдиректива вам не нужна.

Директива DirectoryIndex, скорее всего, уже установлена index.php​​в конфигурации сервера, поэтому она может не потребоваться здесь, но для полноты ее следует включить. Она требуется, когда запрашивается сам каталог приложения (т. е. https://www.example.de/org1/intern/example_app/).

Обратите внимание, что это «внутреннее перенаправление», или, как его чаще называют, «переписывание». Если вы просто говорите «перенаправление», то это подразумевает «внешнее (HTTP) перенаправление», что является чем-то совершенно другим.


Мне интересно, не мешает ли этот файл тому .htaccess file, что находится ниже:/var/www/html/intern/organisation/example_app/

Несколько .htaccessфайлов (и конфигурация сервера) могут конфликтовать. Однако директивы mod_rewrite в дочерней конфигурации (в том жеконтекст, то есть.каталог) полностью переопределит директивы mod_rewrite в родительской конфигурации (по умолчанию).


В стороне:(или, возможно, нет)

Путь к веб-приложению на сервере:/var/www/html/intern/organisation/example_app

URL-адрес веб-приложения:https://www.example.de/org1/intern/example_app/

Хотя, немного сбивает с толку, file-path и URL-path, похоже, не совпадают? У вас есть дополнительная перезапись или Aliasнастройка в конфигурации сервера, или example_appв file-path другой каталог, чем example_appв URL-path?

решение2

Большое спасибо за подробные ответы. Проблема была не в правилах переписывания.

Проблема была проста. Весь .htaccess не работал, потому что мне пришлось активировать AllowOveride в httpd.conf.

Связанный контент