Я взял на себя проект, в котором старый разработчик просто исчез, и моя первая самозанятая задача - реплицировать весь стек на хост 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
В этом случае представляется, что RewriteRule переписывает все запросы в файл index.php. Это очень распространено в рамках, но вы можете выполнить его без рамки. Внутри файла index.php он анализирует строку запроса и перенаправляет ее в соответствующие файлы PHP.
Следует отметить, что он будет переписываться только в файл index.php, если он не найдет соответствующий файл или каталог в запросе - что это делает это правило:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
Прежде всего, вы можете вставить содержимое файла htaccess, чтобы мы могли видеть правила, которые у вас уже есть. Я считаю, что у вас должно быть что-то вроде
RewriteRule ^([^\.]+)$ $1.php [NC,L]
Кроме того, некоторые хостинг-провайдеры (включая AWS EC2 от того, что я знаю) потребуют MultiViews, включенных в конфигурацию apache.
Вы также можете проверить, что ваш файл.htaccess анализируется и используется (вы можете включить перезапуск уровня отладки или просто добавить какой-нибудь фиктивный код в файл.htaccess и дождаться ошибки :)). Если apache не загружает файлы.htaccess, проверьте настройки AllowOverride и Require (у вас должно быть AllowOverride All и Required All Granted).