2015-05-12 2 views
1

Давайте предположим, что у меня есть веб-сайт под названиемMod переписан без .htaccess

foo.com 

я могу получить доступ к foo.com и запускает index.php найденный в корневой папке. Мой вопрос: как отредактировать файл vhost, чтобы включить переписывание мод без включения htaccess?

Моя цель состоит в том, чтобы иметь возможность написать

http://foo.com/bar/loremipsum/dolor 

в мой адресной строке браузера и запустить index.php независимо от количества/символов в URL. Мой index.php будет обрабатывать параметры, разделенные параметром/

Как я могу достичь этого?

EDIT: ВХост файл:

<VirtualHost *:80> 
     ServerName myproject.com 
     ServerAlias www.myproject.com 

     ServerAdmin [email protected] 
     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> 

EDIT: Проблема, как говорит принятый ответ, что этот хозяин не содержит строку, которая превращает перепишем двигатель на. Эта строка присутствует в ответе. Это решает проблему.

+0

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

+1

Нет ничего, что вам нужно для редактирования в файле vhost.Если модуль mod_rewrite включен, вы просто добавляете свои правила в конкретный vhost в директиве 'Directory'. Если он не включил модуль, добавьте правила, как указано. –

+0

Я вижу. Итак, если это разрешено, такие вещи, как this RewriteRule^(. *) $ Index.php [QSA, L], должны работать в теге Directory? –

ответ

3

Чтобы запретить использование 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> 

предполагающего, что «/ уаг/WWW/htdocs "- это ваш корневой каталог.

Чтобы обеспечить загрузку mod_rewrite, проверьте файл httpd.conf для строки LoadModule, содержащей mod_rewrite, и убедитесь, что она раскоментирована. Вам нужно будет перезапустить сервер в любое время, когда вы вносите изменения в конфигурацию vhost.

Краткое объяснение:

линия:

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

является условием, чтобы проверить, что запрос не существующий файл (-f) или существующий каталог (-d). Эти условия служат 2 основные цели:

  1. Это предотвращает перепишем двигатель от зацикливания, так что index.php не будет также получить переписаны. Поскольку index.php является существующим файлом, условия останавливают механизм перезаписи.
  2. Позволяет переписывать ресурсы и активы, такие как изображения или сценарии.

Если вы хотите все Переданы index.php независимо от того, что (в том числе изображений или что-либо еще), то вы можете изменить 2 условия просто:

RewriteCond %{REQUEST_URI} !^/index.php 

так, что все получает переписан кроме index.php ,

+0

Я ищу httpd.conf. Надеюсь, я найду это легко. –

+0

Недопустимая команда RewriteCond. Я должен установить LoadModule, я думаю. –

+0

Я запустил a2enmod переписать, перезапустил сервер, но http://foo.com/bar не работает index.php –

Смежные вопросы