
У меня есть веб-приложение 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.