Linux el cheapoホスティングサービスでホストされているサイトがあり、Apache 2.2.8&PHP 5.2.5wを実行しているMacOS X 10.5 Leopard Serverサーバーに移行しています。/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]
ご覧のとおり、/view/
と/order/
のRewriteRule
ディレクティブをコメントアウトしたので、/category/
のみを扱っています。 http://domain.tld/category/2/
を読み込もうとすると、category.php
が実行されます(確認のためにデバッグコードを追加しました)が、$_SERVER['REQUEST_URI']
は/category/2/
として送信され、$_GET['category']
は空として送信されます。
私は通常、.htaccessファイルとmod_rewriteディレクティブのトラブルシューティングに問題はありませんが、これは何らかの理由で私を困惑させます。
Update:私は Joshの提案 に従いました。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 /をロードしようとすると、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
_などの別の名前に変更するとどうなりますか?
EDIT2:
何かが/category/(.*)
を_/category/$1
_に書き換えているようで、それが何であるかわからないので、変更してみませんか。
_RewriteRule ^category/([^/\.]+)/?$ /category.php?category=$1 [L]
_
に:
_RewriteRule ^category.php/([^/\.]+)/?$ /category.php?category=$1 [L]
_
それが機能するかどうかを確認しますか?
私はおそらくここでばかですが、それは期待される動作ではありませんか? Mod_rewriteは、ファイルを検索するためにURLをインラインで変更します。PHPで示される環境変数は、通常は変更されません。
カテゴリ変数を引き出すには、REQUEST_URI文字列を解析する必要があると思います。
マーク