У меня есть сайт, на котором я пытаюсь переписать search / ks3 / 7 / example-topic на search.php? Ks = ks3 & year = 7 & topic = example-topic
Я использую apache mod_rewrite и my.htaccess выглядит следующим образом:
RewriteEngine On
RewriteBase /
RewriteRule ^search/(a-zA-Z0-9+)/(a-zA-Z0-9+)/(a-zA-Z0-9-+) search.php?ks=$1&year=$2&topic=$3 [R=301,L]
Однако, когда я просматриваю поиск / ks3 / 7 / example, мои php $ _GET ['ks'], $ _GET ['topic'] и $ _GET ['year'] не содержат данных.
Мой журнал ошибок apache показывает ошибки в PHP "undefined index ks" и т. д.
Мой журнал перезаписи (для которого задано многословие 9) показывает:
192.168.0.171 - - [08/Jan/2012:13:11:46 +0000] [192.168.0.10/sid#7ff3cc9b7460][rid#7ff3c65f90a0/initial] (3) [perdir /data/shared/chemistry/] add path info postfix: /data/shared/chemistry/search.php -> /data/shared/chemistry/search.php/ks3/7/example-topic
192.168.0.171 - - [08/Jan/2012:13:11:46 +0000] [192.168.0.10/sid#7ff3cc9b7460][rid#7ff3c65f90a0/initial] (3) [perdir /data/shared/chemistry/] strip per-dir prefix: /data/shared/chemistry/search.php/ks3/7/example-topic -> search.php/ks3/7/example-topic
192.168.0.171 - - [08/Jan/2012:13:11:46 +0000] [192.168.0.10/sid#7ff3cc9b7460][rid#7ff3c65f90a0/initial] (3) [perdir /data/shared/chemistry/] applying pattern '^search/(a-zA-Z0-9+)/(a-zA-Z0-9+)/(a-zA-Z0-9-+)$' to uri 'search.php/ks3/7/example-topic'
192.168.0.171 - - [08/Jan/2012:13:11:46 +0000] [192.168.0.10/sid#7ff3cc9b7460][rid#7ff3c65f90a0/initial] (1) [perdir /data/shared/chemistry/] pass through /data/shared/chemistry/search.php
192.168.0.171 - - [08/Jan/2012:13:11:46 +0000] [192.168.0.10/sid#7ff3cc9b7460][rid#7ff3c65f00a0/subreq] (1) [perdir /data/shared/chemistry/] pass through /data/shared/chemistry/ks3
и мой файл виртуальных хостов apache выглядит следующим образом
<VirtualHost *:80>
ServerAdmin powerj96@hotmail.co.uk
DocumentRoot /data/shared/chemistry
<Directory /data/shared/chemistry/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
</Directory>
<Directory />
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
</VirtualHost>
Mod_Rewrite определенно работает.Я попробовал правило:
RewriteRule ^google http://www.google.com [R=301,L]
, и это работает.
Я также запускаю 4 других виртуальных хоста на сервере, 3 из которых являются только веб-сайтами, а 1 - веб-интерфейсом передачи.
Я использую Ubuntu Server 11.11
EDIT:
Я думаю, что проблема может быть связана с запуском обратного прокси вместе с этим.например, если обратный прокси-сервер меняет 192.168.0.10:81 (адрес моего сервера и порт 81 vhost) на передачу / сеть, то тот факт, что передача работает на 192.168.0.10/transmission/web, который является одновременно и vhost, иПодкаталог сайта, который работает по адресу 192.168.0.10/ (тот, о котором идет речь в этом посте), может вызывать конфликты в модуле перезаписи.Есть ли у вас какие-либо идеи для решения этой проблемы, если вы считаете, что это может быть проблемой.
РЕДАКТИРОВАТЬ:
Это полный журнал для всего, что происходит, когда я нажимаю ссылку поиска / ks3/ 7 / example-topic
(1) [perdir /data/shared/chemistry/] pass through /data/shared/chemistry/search.php
(3) [perdir /data/shared/chemistry/] add path info postfix: /data/shared/chemistry/search.php -> /data/shared/chemistry/search.php/ks3/7/example-topic
(3) [perdir /data/shared/chemistry/] strip per-dir prefix: /data/shared/chemistry/search.php/ks3/7/example-topic -> search.php/ks3/7/example-topic
(3) [perdir /data/shared/chemistry/] applying pattern '^search/([^/]+)/([^/]+)/([^/]+)' to uri 'search.php/ks3/7/example-topic'
(1) [perdir /data/shared/chemistry/] pass through /data/shared/chemistry/search.php
(1) [perdir /data/shared/chemistry/] pass through /data/shared/chemistry/ks3
EDIT:
Я понял источник проблемы после просмотра этого файла журнала.По какой-то причине apache переписывает search / ks3 / 7 / example-topic в search.php / ks3 / 7 / example-topic, прежде чем применить мое переписывание, поэтому search / ks3 / 7 / example-topic не удовлетворяет
^search/([^/]+)/([^/]+)/([^/]+)
Правило.Я изменил правило на
^search.php/([^/]+)/([^/]+)/([^/]+)
, и это работает.
Есть ли у вас какие-либо идеи о том, как остановить переписывание apache search / ks3 / 7 / example-topic для search.php /ks3 / 7 / example-topic?
Работает сейчас, после удаления опций QSA, NC и R = 301.