Назад | Перейти на главную страницу

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

Поставляемый «тег» может быть цифрами, буквами, словами с дефисом (т. Е. Любыми словами) или комбинацией цифр и букв. В правилах не должен учитываться регистр.

Я ценю любую помощь по этому поводу.

Проблема в том, что %{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]

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