Предположим, у меня есть веб-сайт с именем
foo.com
Я могу получить доступ foo.com
и он управляет index.php
нашел в корневой папке. Мой вопрос: как мне отредактировать файл vhost, чтобы включить режим перезаписи без включения htaccess?
Моя цель — уметь писать
http://foo.com/bar/loremipsum/dolor
в адресную строку моего браузера и запустить index.php независимо от количества символов / в URL. Мой index.php будет обрабатывать параметры, разделенные /
Как мне этого добиться?
РЕДАКТИРОВАТЬ:
Vhost файл:
<VirtualHost *:80>
ServerName myproject.com
ServerAlias www.myproject.com
ServerAdmin webmaster@localhost
DocumentRoot /opt/apps/myproject
<Directory /opt/apps/myproject>
# disable htaccess
AllowOverride None
# route everything to index.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ /index.php [L]
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
РЕДАКТИРОВАТЬ: Проблема, как предполагает принятый ответ, состоит в том, что этот хост не содержал строку, которая включает механизм перезаписи. Эта строка присутствует в ответе. Что решает проблему.
Чтобы запретить использование htaccess, вам нужна эта директива в <Directory>
контейнер для корня вашего документа, тогда вы можете просто поместить правила mod_rewrite в тот же контейнер:
<Directory "/var/www/htdocs/">
# disable htaccess
AllowOverride None
# route everything to index.php
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ /index.php [L]
</Directory>
предполагая, что «/ var / www / htdocs» является вашим корневым документом.
Чтобы убедиться, что mod_rewrite загружен, проверьте файл httpd.conf на наличие LoadModule
строка, содержащая mod_rewrite, и убедитесь, что она не закомментирована. Вам нужно будет перезапустить сервер каждый раз, когда вы вносите изменения в конфигурацию vhost.
Краткое объяснение:
Линии:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
условия для проверки того, что запрос не существующий файл (-f
) или существующий каталог (-d
). Эти условия служат 2 основным целям:
index.php
также не будет переписан. поскольку index.php
является существующим файлом, условия останавливают механизм перезаписи.Если ты хочешь все направлено на index.php
независимо от того, что (включая изображения или что-то еще), вы можете изменить 2 условия просто:
RewriteCond %{REQUEST_URI} !^/index.php
так что все переписывается кроме index.php
,
Других решений пока нет …