Сайт работает только с index.php - PullRequest
0 голосов
/ 20 мая 2019

У меня есть два веб-сайта на сервере Red Hat Linux; первый находится в var/www и имеет следующую конфигурацию в var/www/html/.htaccess.

Options +FollowSymLinks +ExecCGI

<IfModule mod_rewrite.c>
  RewriteEngine On

 # Reroute to index.php
  RewriteCond $1 !^(index\.php)
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule ^(.*)$ index.php [L,QSA]

</IfModule>

Второй сайт находится в var/www/laravel, а его конфигурационный файл - в var/www/laravel/public/.htaccess. Я попытался использовать ту же конфигурацию, что и на первом сайте, удалив файл и используя конфигурацию по умолчанию, указанную ниже:

<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
    Options -MultiViews -Indexes
</IfModule>

RewriteEngine On

# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} (.+)/$
RewriteRule ^ %1 [L,R=301]

# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]

Я также использовал предоставленный конфиг в документации :

Options +FollowSymLinks
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]

Я также проверил, не откомментирован ли мой mod_rewrite с помощью этой команды:

grep -i LoadModule /etc/httpd/conf/httpd.conf | grep rewrite

и это так.

Первый веб-сайт работает нормально без index.php, но Laravel нужен один. Любые намеки на то, что я делаю неправильно?

РЕДАКТИРОВАТЬ: вот как я создал псевдоним для второго сайта, может быть, это поможет:

<VirtualHost *:80>
   ServerAdmin example@example.com
   DocumentRoot /var/www/html/
   ServerName www.example.com
   ServerAlias *.example.com
   Alias /laravel /var/www/laravel/public/
   ErrorLog "|/usr/sbin/rotatelogs /var/log/httpd/www.example.com-error_log.%y%m%d 86400"
   CustomLog "|/usr/sbin/rotatelogs /var/log/httpd/www.example.com-access_log.%y%m%d 86400" combined

#   php_admin_value upload_tmp_dir "/var/www/html/tmp/"
#   php_admin_value open_basedir "/var/www/html/:/var/cache/www/"

   <Directory /var/www/html/>
      AllowOverride All
   </Directory>

   <Directory /var/www/laravel/public/>
      AllowOverride All
   </Directory>
</VirtualHost>

1 Ответ

1 голос
/ 20 мая 2019

Самое простое решение кроется в этом ответе . Предполагая, что ваш сервер Apache настроен на разрешение файлов .htaccess, отредактируйте файл, соответствующий вашему сайту, и добавьте следующую строку:

DirectoryIndex index.php

Согласно документации Apache ,

Директива DirectoryIndex устанавливает список ресурсов для поиска, когда клиент запрашивает индекс каталога, указав / в конце имени каталога.

Если в вашем файле .htaccess еще нет указания index.php для директивы DirectoryIndex, вам необходимо добавить его, чтобы Apache знал, что он может обслуживать этот файл, когда ваш браузер запрашивает базовый адрес.

Если вы не хотите, чтобы ваш сервер разрешал файлы .htaccess, вы можете вместо этого изменить файл httpd.conf для своего сайта:

<Directory /path/to/site/>
    DirectoryIndex index.php
</Directory>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...