Не могу включить режим перезаписи

Я хочу использовать mod_rewrite с Wampserver, чтобы удалить «/index.php/» из адресной строки. Этот код предлагается с Codeigniter Framework:

RewriteEngine on
#RewriteBase /
RewriteCond $1 !^(index\.php|img|table-images|robots\.txt|css|fonts|js|uploads|dbg-wizard\.php)
RewriteRule ^(.*)$ index.php/$1 [L]

Это должно изменить этот URL:

mysite.local/contact_us

к этому:

mysite.local/index.php/contact_us

Это работает с XAMPP, но с первым URL-адресом Wampserver генерируется ошибка 404! Я включил mod_rewrite с Apache, и в журнале ошибок нет ошибок.

Обновление:

Я добавил .blabla в .htacess, но ничего не произошло! Это означает, что Apache не читает .htaccess! Почему?


Я добавил AllowOverride All в httpd-vhosts.conf. Apache не выполнил .htaccess, и включения AllowOverride в httpd.conf недостаточно.

Это мой файл httpd-vhosts.conf:

<Directory E:\mysite\www>
Options Indexes FollowSymLinks Includes ExecCGI
#Order Deny,Allow   
#Allow from all 
AllowOverride All
Require all granted
</Directory>

person rostamiani    schedule 07.08.2015    source источник
comment
ты сервер перезапускал?   -  person shafiq.rst    schedule 07.08.2015
comment
Какая версия WAMPServer?   -  person RiggsFolly    schedule 07.08.2015
comment
Я каждый раз перезапускал. Мой wampserver: wampserver2.5-Apache-2.4.9-Mysql-5.6.17-php5.5.12-32b   -  person rostamiani    schedule 08.08.2015
comment
Проверьте значения директив AccessFileName и AllowOverride.   -  person CBroe    schedule 08.08.2015


Ответы (1)


Чтобы проверить, работает ли режим перезаписи, попробуйте выполнить следующие действия:

  1. Создайте папку в корневом каталоге с именем htaccess_test.
  2. Создайте файл .htaccess, поместите в него этот код и сохраните его.

        options +FollowSymLinks RewriteEngine On        
        RewriteBase /htaccess_test/ 
        RewriteCond %{REQUEST_FILENAME} !-f  
        RewriteCond %{REQUEST_FILENAME} !-d 
        RewriteRule ^([a-zA-Z0-9_-]+)/?$ user.php?u=$1
    
  3. Создайте еще один файл с именем user.php, поместите в него этот код и сохраните его.

    <?php
     if(isset($_GET['u'])){
     echo $_GET['u'];
     }
    
  4. Теперь перейдите в браузере и введите http://localhost/htaccess_test/put_some_value_here.

Если это работает, проблема не в настройках Apache.

Убедитесь, что вы редактируете правильный файл .htaccess. Файл .htaccess, который вам нужно отредактировать, находится в корневой папке ваших проектов, а не в папке приложения или какой-либо другой папке. И поместите этот код

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /root_directory_of_your_project/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L] 
</IfModule>
person Harry    schedule 08.08.2015