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

Переименовать расширение файла, скрывающее URL

Я хочу показать URL
http://some.com/designit/portfolio.php?cat=website&subcat=nature
так как
http://some.com/designit/portfolio/website/nature.

cat и subcat в URL может присутствовать, но не всегда.

Я поместил этот файл .htaccess в папку designit:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ $1.php [L,QSA]
RewriteRule ^portfolio/?$ portfolio.php[NC,QSA]
RewriteRule ^portfolio/([a-zA-Z0-9_-]+)/?$ portfolio.php?cat=$1[L,NC,QSA]

Теперь это показывает
..some.com/designit/portfolio.php
так как
..some.com/designit/portfolio

но это не показывает
..some.com/designit/portfolio.php?cat=website
так как
..some.com/designit/portfolio/website

Я получаю сообщение «Внутренняя ошибка сервера. Сервер обнаружил внутреннюю ошибку или неправильную конфигурацию и не смог выполнить ваш запрос».

Что мне нужно сделать, чтобы это исправить?

Вот ваше решение:

http://some.com/designit/portfolio/website/nature

должен дать

http://some.com/designit/portfolio.php?cat=website&subcat=nature

Вам нужно только одно правило перезаписи:

RewriteEngine On
RewriteRule /designit/portfolio/([a-z]+)/([a-z]+)$ /designit/portfolio.php?cat=$1&subcat=$2

Обратите внимание:

  • cat и subcat должны быть только альфа-символами (вы можете изменить их по своему усмотрению)
  • вам не нужно проверять, является ли это файл или нет, потому что «только альфа-символы = без расширения = вы уверены, что это не тот файл, который запрашивается» (если вы не делитесь файлами без расширения, но это было бы странно (к минимуму))

Поместите ваше более конкретное правило, второе, перед общим правилом, и оно должно сработать.

См. Ниже URL: Может вам помочь.

http://corz.org/serv/tricks/htaccess2.php?page=all

Попробуйте ниже:

RewriteEngine on
RewriteRule ^portfolio/([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)$   /disignit/portfolio.php?first-var=$1&second-var=$2  [NC]