Хотя я новичок в 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]
(Хотя я это не проверял)