.htaccess ведет себя не так, как хотелось бы

.htaccess ведет себя не так, как хотелось бы

Хотя я новичок в htaccess, я многому научился за последние несколько дней, но я застрял на определенной части, из-за которой веб-сайт не вел себя так, как хотелось бы. Вот часть кода, где у меня delima:

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=какое-то-слово.индекс.phpПравило работает хорошо, когда второе условие закомментировано, но когда добавляется толькопродукт.phpправило работает.

Предоставленный "тег" может быть цифрами, буквами, дефисными словами (т.е. any-words) или комбинацией цифр и букв. Правила должны быть нечувствительны к регистру.

Буду признателен за любую помощь по этому вопросу.

решение1

Проблема в том, что %{REQUEST_FILENAME}этоабсолютныйпуть, переведенный из URL, то есть дляhttp://example.com/foobarэто может быть что-то вроде /var/www/vhost/example.com/httpdocs/foobar(в зависимости от того, как настроен ваш веб-сервер). Я предлагаю вам использовать сопоставление с шаблоном в URL, как в

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

(Хотя я это не проверял)

Связанный контент