У меня есть сайт, размещенный на хостинге linux el cheapo, который я переношу на свой сервер Mac OS X 10.5 Leopard Server с Apache 2.2.8 и PHP 5.2.5 с включенным rewrite_module и AllowOverride All
, но у меня возникла проблема со следующими строками в .htaccess
файл:
RewriteEngine On
#RewriteRule ^view/([^/\.]+)/?$ /view.php?item=$1 [L]
#RewriteRule ^order/([^/\.]+)/?$ /order.php?item=$1 [L]
RewriteRule ^category/([^/\.]+)/?$ /category.php?category=$1 [L]
Как видите, я закомментировал RewriteRule
директивы для /view/
и /order/
, поэтому я имею дело только с /category/
. Когда я пытаюсь загрузить http://domain.tld/category/2/
это работает category.php
(Я добавил код отладки для подтверждения), но $_SERVER['REQUEST_URI']
проходит как /category/2/
и $_GET['category']
проходит как пустой.
Обычно я хорошо справляюсь с устранением неполадок с файлами .htaccess и директивами mod_rewrite, но по какой-то причине меня поставили в тупик.
Обновить: Я последовал за Предложение Джоша и вот что сброшено в mod_rewrite.log
когда я пытаюсь получить доступ http://domain.tld/category/2/
:
65.19.81.253 - - [22/Oct/2009:17:31:53 --0400] [domain.tld/sid#100aae0b0][rid#100b5ea98/initial] (2) init rewrite engine with requested uri /category/13
65.19.81.253 - - [22/Oct/2009:17:31:53 --0400] [domain.tld/sid#100aae0b0][rid#100b5ea98/initial] (3) applying pattern '.*' to uri '/category/13'
65.19.81.253 - - [22/Oct/2009:17:31:53 --0400] [domain.tld/sid#100aae0b0][rid#100b5ea98/initial] (1) pass through /category/13
65.19.81.253 - - [22/Oct/2009:17:31:53 --0400] [domain.tld/sid#100aae0b0][rid#100b6aa98/subreq] (3) [perdir /Library/WebServer/Documents/tld.domain.www/] add path info postfix: /Library/WebServer/Documents/tld.domain.www/category.php -> /Library/WebServer/Documents/tld.domain.www/category.php/13
65.19.81.253 - - [22/Oct/2009:17:31:53 --0400] [domain.tld/sid#100aae0b0][rid#100b6aa98/subreq] (3) [perdir /Library/WebServer/Documents/tld.domain.www/] strip per-dir prefix: /Library/WebServer/Documents/tld.domain.www/category.php/13 -> category.php/13
65.19.81.253 - - [22/Oct/2009:17:31:53 --0400] [domain.tld/sid#100aae0b0][rid#100b6aa98/subreq] (3) [perdir /Library/WebServer/Documents/tld.domain.www/] applying pattern '^category/([^/\.]+)/?$' to uri 'category.php/13'
65.19.81.253 - - [22/Oct/2009:17:31:53 --0400] [domain.tld/sid#100aae0b0][rid#100b6aa98/subreq] (1) [perdir /Library/WebServer/Documents/tld.domain.www/] pass through /Library/WebServer/Documents/tld.domain.www/category.php
65.19.81.253 - - [22/Oct/2009:17:31:53 --0400] [domain.tld/sid#100aae0b0][rid#100b5ea98/initial] (3) [perdir /Library/WebServer/Documents/tld.domain.www/] add path info postfix: /Library/WebServer/Documents/tld.domain.www/category.php -> /Library/WebServer/Documents/tld.domain.www/category.php/13
65.19.81.253 - - [22/Oct/2009:17:31:53 --0400] [domain.tld/sid#100aae0b0][rid#100b5ea98/initial] (3) [perdir /Library/WebServer/Documents/tld.domain.www/] strip per-dir prefix: /Library/WebServer/Documents/tld.domain.www/category.php/13 -> category.php/13
65.19.81.253 - - [22/Oct/2009:17:31:53 --0400] [domain.tld/sid#100aae0b0][rid#100b5ea98/initial] (3) [perdir /Library/WebServer/Documents/tld.domain.www/] applying pattern '^category/([^/\.]+)/?$' to uri 'category.php/13'
65.19.81.253 - - [22/Oct/2009:17:31:53 --0400] [domain.tld/sid#100aae0b0][rid#100b5ea98/initial] (1) [perdir /Library/WebServer/Documents/tld.domain.www/] pass through /Library/WebServer/Documents/tld.domain.www/category.php
65.19.81.253 - - [22/Oct/2009:17:31:53 --0400] [domain.tld/sid#100aae0b0][rid#100b6ea98/subreq] (2) init rewrite engine with requested uri /13
65.19.81.253 - - [22/Oct/2009:17:31:53 --0400] [domain.tld/sid#100aae0b0][rid#100b6ea98/subreq] (3) applying pattern '.*' to uri '/13'
65.19.81.253 - - [22/Oct/2009:17:31:53 --0400] [domain.tld/sid#100aae0b0][rid#100b6ea98/subreq] (1) pass through /13
65.19.81.253 - - [22/Oct/2009:17:31:53 --0400] [domain.tld/sid#100aae0b0][rid#100b6ea98/subreq] (3) [perdir /Library/WebServer/Documents/tld.domain.www/] strip per-dir prefix: /Library/WebServer/Documents/tld.domain.www/13 -> 13
65.19.81.253 - - [22/Oct/2009:17:31:53 --0400] [domain.tld/sid#100aae0b0][rid#100b6ea98/subreq] (3) [perdir /Library/WebServer/Documents/tld.domain.www/] applying pattern '^category/([^/\.]+)/?$' to uri '13'
65.19.81.253 - - [22/Oct/2009:17:31:53 --0400] [domain.tld/sid#100aae0b0][rid#100b6ea98/subreq] (1) [perdir /Library/WebServer/Documents/tld.domain.www/] pass through /Library/WebServer/Documents/tld.domain.www/13
просто добавьте это в свой файл .htaccess
Options -MultiViews
у меня была одна и та же проблема в течение нескольких часов
я не знаю почему, но он включен по умолчанию в OSX
он вызывает ошибку, потому что при попытке загрузить категория / он находит category.php и перенаправляет все после косой черты в этот файл
У вас есть доступ к httpd.conf? Если да, добавьте в httpd.conf:
RewriteLog "/tmp/mod_rewrite.log"
RewriteLogLevel 3
И опубликуйте, что говорится в журнале при загрузке /category/2
. Удалите это после того, как получите от него нужную информацию - это очень расточительно для ресурсов сервера.
РЕДАКТИРОВАТЬ:
Спасибо за журнал. Что-то переписывает URL-адрес на: /category.php/13
. Какие-нибудь другие правила RewriteRules? Вы используете FastCGI? Что если переименовать category.php
к чему-то другому, например Category.php
или display_category.php
?
РЕДАКТИРОВАТЬ2:
Поскольку что-то вроде переписывает /category/(.*)
к /category/$1
, а мы не знаем, что это такое, почему бы вам не изменить:
RewriteRule ^category/([^/\.]+)/?$ /category.php?category=$1 [L]
кому:
RewriteRule ^category.php/([^/\.]+)/?$ /category.php?category=$1 [L]
и посмотреть, работает ли это?
Я, наверное, здесь идиот, но разве это не ожидаемое поведение? Mod_rewrite изменяет встроенный URL для поиска файла, переменные среды, видимые PHP, обычно не меняются.
Я думаю, вам нужно проанализировать строку REQUEST_URI, чтобы вытащить переменную категории.
отметка