2013-07-25 6 views
1

У меня два сервера Apache имеют одинаковые настройки, я клонировал конфигурационные файлы apache и только изменил часть ServerName. Когда я набираю mysite.com/somestuff, он должен переписываться на index.php, он делает это на моем старом сервере, но не в моем новом. Я убедился, что .htaccess есть, когда я делаю mysite.com/index.php/somestuff, он работает, но, как и мой первый сайт, мне нужно, чтобы он работал с mysite.com/somestuff.Правила перезаписи Apache не работают должным образом

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

#.htaccess file 
<IfModule mod_rewrite.c> 
    Options +FollowSymlinks 
    RewriteEngine On 

    RewriteCond %{ENV:REDIRECT_STATUS} ^$ 
    RewriteRule ^app\.php(/(.*)|$) %{CONTEXT_PREFIX}/$2 [R=301,L] 
    RewriteCond %{REQUEST_FILENAME} -f 
    RewriteRule .? - [L] 

    RewriteCond %{REQUEST_URI}::$1 ^(/.+)(.+)::\2$ 
    RewriteRule ^(.*) - [E=BASE:%1] 
    RewriteRule .? %{ENV:BASE}index.php/ [L] 
</IfModule> 

<IfModule !mod_rewrite.c> 
    <IfModule mod_alias.c> 
     RedirectMatch 302 ^/$ /index.php/ 
    </IfModule> 
</IfModule> 
<IfModule mod_headers.c> 
    Header set Access-Control-Allow-Origin "*" 
</IfModule> 

Теперь для моего апача конфигурации

<VirtualHost *:80> 
     ServerAdmin [email protected] 
     ServerName mysite.com 
     DocumentRoot /home/richardw/www/halogen/web 
     <Directory /> 
       Options FollowSymLinks 
       AllowOverride All 
     </Directory> 
     <Directory /home/richardw/www/halogen/web/> 
       Options Indexes FollowSymLinks MultiViews 
       AllowOverride All 
       Order allow,deny 
       allow from all 
     </Directory> 

     ErrorLog ${APACHE_LOG_DIR}/error.log 

     # Possible values include: debug, info, notice, warn, error, crit, 
     # alert, emerg. 
     LogLevel warn 

     CustomLog ${APACHE_LOG_DIR}/access.log combined 
</VirtualHost> 

Мои извинения, если это репост, но Я искал все, и я собираюсь потерять его.

+1

Когда вы переходите на 'http: // mysite.com /', вы перенаправлены на 'http: // mysite.com/index.php /'? –

+0

да это действительно jon –

ответ

0

Вы попробуйте комментировать или удалить эту строку
Options +FollowSymlinks
в вашем .htaccess?

+0

Наверняка, я пробовал все, что мог придумать. –

2

Когда вы идете в http://mysite.com/, вы перенаправлены на http://mysite.com/index.php/?

Если это происходит, значит, mod_rewrite не загружен на ваш новый сервер. Вам нужно убедиться, что он загружен в конфигурационный файл сервера apache. См. this answer для получения некоторых инструкций о том, как это работает для apache.

Причина редирект работает из-за этого контейнера:

<IfModule !mod_rewrite.c> 
    <IfModule mod_alias.c> 
     RedirectMatch 302 ^/$ /index.php/ 
    </IfModule> 
</IfModule> 

Это по существу говорит: «если mod_rewrite является не загружен», то при загрузке mod_alias, он перенаправляет запрос корня /index.php/ , Так что, если происходит перенаправление, mod_rewrite не загружен.

+0

Да что было: /. Клянусь, я сделал это, но я пропустил его. ln -s /etc/apache2/mods-available/rewrite.load /etc/apache2/mods-enabled/rewrite.load –

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