2016-02-14 2 views
0

я провел 2 дня на следующей задаче:правило Rewrite не работает на виртуальном хосте

У меня есть виртуальный хост на сервере Apache 2.4.7 со следующей конфигурацией:

<VirtualHost *:80> 
     DocumentRoot /home/xxx/test/www 
     ServerAdmin [email protected] 
     ServerName test.xxx.com 
     ServerAlias www.test.xxx.com 
     AddHandler x-httpd-php5 .php 

     ErrorLog ${APACHE_LOG_DIR}/xxx-test-error.log 
     LogLevel warn 
     LogLevel alert rewrite:trace6 

     CustomLog ${APACHE_LOG_DIR}/xxx-test-access.log combined 

     <Directory /> 
       Options FollowSymLinks 
       AllowOverride All 
     </Directory> 

     <Directory /home/xxx/test/www/> 
       Options Indexes FollowSymLinks MultiViews 
       AllowOverride All 
       Require all granted 
     </Directory> 

</VirtualHost> 

И .htaccess файл, как это:

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteRule ^article/([^/\.]+)/?$ article-page.php?name=$1 [L] 
    RewriteRule ^list/.?$ list.php [L] 
    RewriteRule ^sitemap.xml$ sitemap.php [L] 
    </IfModule> 

Я хочу, чтобы все URL, созданные/список/обработали list.php

Но когда я lauch URL: http://test.xxx.com/list/yyy-category

Он просто возвращает 404. Я проверил, list.php существует и имеет хорошие права.

Я проверил журналы, и я получил:

[Sun Feb 14 21:00:23.764091 2016] [rewrite:trace3] [pid 17393] mod_rewrite.c(468): [client 79.81.246.191:53329] 79.81.246.191 - - [test.xxx.com/sid#66dd81c14970][rid#66dd81b400a0/subreq] [perdir /home/xxx/test/www/] add path info postfix: /home/xxx/test/www/list.php -> /home/xxx/test/www/list.php/yyy-category, referer: http://test.xxx.com/ 
[Sun Feb 14 21:00:23.764163 2016] [rewrite:trace3] [pid 17393] mod_rewrite.c(468): [client 79.81.246.191:53329] 79.81.246.191 - - [test.xxx.com/sid#66dd81c14970][rid#66dd81b400a0/subreq] [perdir /home/xxx/test/www/] strip per-dir prefix: /home/xxx/test/www/list.php/yyy-category -> list.php/yyy-category, referer: http://test.xxx.com/ 
[Sun Feb 14 21:00:23.764194 2016] [rewrite:trace3] [pid 17393] mod_rewrite.c(468): [client 79.81.246.191:53329] 79.81.246.191 - - [test.xxx.com/sid#66dd81c14970][rid#66dd81b400a0/subreq] [perdir /home/xxx/test/www/] applying pattern '^article/([^/\\.]+)/?$' to uri 'list.php/yyy-category', referer: http://test.xxx.com/ 
[Sun Feb 14 21:00:23.764228 2016] [rewrite:trace3] [pid 17393] mod_rewrite.c(468): [client 79.81.246.191:53329] 79.81.246.191 - - [test.xxx.com/sid#66dd81c14970][rid#66dd81b400a0/subreq] [perdir /home/xxx/test/www/] add path info postfix: /home/xxx/test/www/list.php -> /home/xxx/test/www/list.php/yyy-category, referer: http://test.xxx.com/ 
[Sun Feb 14 21:00:23.764259 2016] [rewrite:trace3] [pid 17393] mod_rewrite.c(468): [client 79.81.246.191:53329] 79.81.246.191 - - [test.xxx.com/sid#66dd81c14970][rid#66dd81b400a0/subreq] [perdir /home/xxx/test/www/] strip per-dir prefix: /home/xxx/test/www/list.php/yyy-category -> list.php/yyy-category, referer: http://test.xxx.com/ 
[Sun Feb 14 21:00:23.764287 2016] [rewrite:trace3] [pid 17393] mod_rewrite.c(468): [client 79.81.246.191:53329] 79.81.246.191 - - [test.xxx.com/sid#66dd81c14970][rid#66dd81b400a0/subreq] [perdir /home/xxx/test/www/] applying pattern '^list/(.?)$' to uri 'list.php/yyy-category', referer: http://test.xxx.com/ 
[Sun Feb 14 21:00:23.764355 2016] [rewrite:trace3] [pid 17393] mod_rewrite.c(468): [client 79.81.246.191:53329] 79.81.246.191 - - [test.xxxcom/sid#66dd81c14970][rid#66dd81b400a0/subreq] [perdir /home/xxx/test/www/] add path info postfix: /home/xxx/test/www/list.php -> /home/xxx/test/www/list.php/yyy-category, referer: http://test.xxx.com/ 
[Sun Feb 14 21:00:23.764386 2016] [rewrite:trace3] [pid 17393] mod_rewrite.c(468): [client 79.81.246.191:53329] 79.81.246.191 - - [test.xxx.com/sid#66dd81c14970][rid#66dd81b400a0/subreq] [perdir /home/xxx/test/www/] strip per-dir prefix: /home/xxx/test/www/list.php/yyy-category -> list.php/yyy-category, referer: http://test.xxx.com/ 
[Sun Feb 14 21:00:23.764414 2016] [rewrite:trace3] [pid 17393] mod_rewrite.c(468): [client 79.81.246.191:53329] 79.81.246.191 - - [test.xxx.com/sid#66dd81c14970][rid#66dd81b400a0/subreq] [perdir /home/xxx/test/www/] applying pattern '^sitemap.xml$' to uri 'list.php/yyy-category', referer: http://test.xxx.com/ 
[Sun Feb 14 21:00:23.764445 2016] [rewrite:trace1] [pid 17393] mod_rewrite.c(468): [client 79.81.246.191:53329] 79.81.246.191 - - [test.xxx.com/sid#66dd81c14970][rid#66dd81b400a0/subreq] [perdir /home/xxx/test/www/] pass through /home/yyy/test/www/list.php, referer: http://test.xxx.com/ 

Любая идея о том, как это исправить?

ответ

0

Я нашел его, это действительно действительно глупо. Как видно из бревен, он пытается сделать его соответствие со следующим файлом, и это не очень хороший тракту

home/xxx/test/www/list.php/yyy-category 

Лучший способ, чтобы не путать апача не есть файл с именем completeny, отличной от префикса URL например, «list-page.php». Правило, которое работает сейчас:

RewriteRule ^list/(.+)?$ list-page.php?query=$1 [L] 
1

Ваш .htaccess соответствует URL-адресам, которые начинаются с «list /», за которым следует один символ, или none (это что-то означает?).

В вашем случае, вы должны изменить правила таким образом:

RewriteRule ^list/.*$ list.php [L] 

* символы означают "Я хочу, чтобы любой символ, 0 или более раз"..

+0

Я помог мне исправить небольшую ошибку, которую я ввел при поиске, но это не было основной причиной. Спасибо, что помогли мне в этом! – Orden

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