.htaccess が期待どおりに動作しない

.htaccess が期待どおりに動作しない

私は htaccess 初心者ですが、ここ数日で多くのことを学んできました。しかし、ある部分で行き詰まってしまい、その結果、Web サイトが期待どおりに動作しなくなりました。私が困っているコードの部分は次のとおりです。

Options +FollowSymLinks -MultiViews
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME}.php -f
Rewriterule ^ %{REQUEST_FILENAME}.php [NC]
# RewriteCond /templates/%{REQUEST_FILENAME}.html -f
RewriteRule ^([^/\.]+)$ index.php?$1 [NC,S=1]
RewriteRule ^([a-zA-Z0-9]+)$ product.php?product_id=$1 [NC]

最初の RewriteCond と RewriteRule は完璧に動作します。問題はその後の部分です。

私が達成したいのは、ユーザーが入力したときに/何かの単語同じ名前のファイルが有効かどうかを検索します/テンプレートフォルダとして保存され、index.php?何か単語そうでなければ、product.php?product_id=何らかの単語。のインデックス2番目の条件がコメントアウトされている場合はルールはうまく機能しますが、製品.phpルールは機能します。

指定する「タグ」は、数字、文字、ハイフンでつながれた単語 (つまり、任意の単語)、または数字と文字の組み合わせです。ルールでは大文字と小文字は区別されません。

この件に関してご助力いただければ幸いです。

答え1

問題は%{REQUEST_FILENAME}絶対URLから変換されたパス、つまりhttp://example.com/foobar/var/www/vhost/example.com/httpdocs/foobar(Webサーバーの設定によって異なりますが)次のようなものになるかもしれません。URLにパターンマッチングを使用することをお勧めします。

RewriteCond %{DOCUMENT_ROOT}/templates/$1.html -f
RewriteRule ^([^\/\.]+)$ index.php?$1 [NC,S=1]

(私はそれをテストしませんでしたが)

関連情報