Как этот URL отображается в Apache?

1

Я взял на себя проект, в котором старый разработчик просто исчез, и моя первая самозанятая задача - реплицировать весь стек на хост EC2.

На исходном ранее существующем хосте я могу нажать URL-адрес, который является http://www.example.com/users/login/ (я могу отбросить конечную косую черту и просто поразить страницу входа в систему).

Просматривая исходный код в /var/www/[example.com] / - я могу найти разделы /users/login.php, которые выглядят так, как будто это страница HTML.

У меня есть тот же самый код на моем вторичном хосте EC2, но я не потрудился использовать виртуальные хосты, я просто помещаю его в /var/www/html/(а не /var/www/[example.com]/), но я получаю 404.

Где я должен искать сопоставление, которое указывает http://www.example.com/users/login/ на /sections/users/login.php?

Я не настолько хорошо знаком с материалами RewriteRule, но только 2 файла.htaccess в репо и в httpd.conf, я не вижу ничего общего с разделами, поэтому я не уверен, где искать.

.Htaccess в моем корневом каталоге:

php_value post_max_size 1024M
php_value upload_max_filesize 1024M
php_value memory_limit 1024M
php_value max_input_time 1800
php_value max_execution_time 1900
php_value session.gc_maxlifetime 7200

<IfModule mod_rewrite.c>
    RewriteEngine On

    RewriteCond %{HTTP_HOST} ^(.*)example.mobi [NC]
    RewriteRule ^(.*)$ http://%1example.com/$1 [R=301,L]

    RewriteCond %{HTTP_HOST} ^(.*)example.us [NC]
    RewriteRule ^(.*)$ http://%1example.com/$1 [R=301,L]

    RewriteBase /

    RewriteEngine On
    RewriteCond %{HTTP_HOST} ^[^.]+\.[^.]+$
    RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [L,R=301]

    RewriteRule ^(.*)\.vcf vcf.php [L]

    RewriteRule ^shared/(.*)$ /$1 [L,NC,R]

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

Options -Indexes
  • 0
    Каково содержимое текущего файла .htaccess? Если он все переписывает в файл index.php, то это что-то в index.php, которое маршрутизирует URL.
  • 0
    @ChrisBanks - я добавил файл .htaccess. Одно из этих правил выполняет переписывание, которое вы предложили? Последнее правило не делает этого ... не так ли?
Показать ещё 5 комментариев
Теги:
.htaccess
mod-rewrite
httpd.conf

2 ответа

2
Лучший ответ

В этом случае представляется, что RewriteRule переписывает все запросы в файл index.php. Это очень распространено в рамках, но вы можете выполнить его без рамки. Внутри файла index.php он анализирует строку запроса и перенаправляет ее в соответствующие файлы PHP.

Следует отметить, что он будет переписываться только в файл index.php, если он не найдет соответствующий файл или каталог в запросе - что это делает это правило:

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

Прежде всего, вы можете вставить содержимое файла htaccess, чтобы мы могли видеть правила, которые у вас уже есть. Я считаю, что у вас должно быть что-то вроде

RewriteRule ^([^\.]+)$ $1.php [NC,L]

Кроме того, некоторые хостинг-провайдеры (включая AWS EC2 от того, что я знаю) потребуют MultiViews, включенных в конфигурацию apache.

Вы также можете проверить, что ваш файл.htaccess анализируется и используется (вы можете включить перезапуск уровня отладки или просто добавить какой-нибудь фиктивный код в файл.htaccess и дождаться ошибки :)). Если apache не загружает файлы.htaccess, проверьте настройки AllowOverride и Require (у вас должно быть AllowOverride All и Required All Granted).

  • Имейте в виду, что для изменения конфигурации потребуется перезагрузить конфигурацию или перезапустить службу apache.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню