私は 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]
(私はそれをテストしませんでしたが)