Нет необходимости взламывать, чтобы удалить "index.php" с помощью RewriteRules.В вашем vhost, или в каталоге по каталогу (или, может быть, .htaccess
файл, который я не знаю), если вы добавили правило вроде:
DirectoryIndex index.html index.php
Тогда оно должно работать прямо из коробки.
Поэтому я сделаю так, как будто ваше правило не существует, потому что оно бесполезно (если вы не покажете мне, почему).
Вы хотите, чтобы пользователь печатал в браузере:http://localhost/page/sample
и внутренне на стороне сервера изменено на: http://localhost/index.php?page=sample
.
Это должно работать:
# if it's neither a file nor a directory:
RewriteCond %{REQUEST_FILENAME}!-f
RewriteCond %{REQUEST_FILENAME}!-d
RewriteRule /([^/]+)/([^/]+)$ /index.php?$1=$2 [QSA,L]
Две подсказки:
Есливы находитесь не в размещенной среде (= если это ваш собственный сервер и вы можете изменять виртуальные хосты, а не только файлы .htaccess
), попробуйте использовать директиву RewriteLog
: она поможет вам отследить такие проблемы:
# Trace:
# (!) file gets big quickly, remove in prod environments:
RewriteLog "/web/logs/mywebsite.rewrite.log"
RewriteLogLevel 9
RewriteEngine On
Мой любимый инструмент для проверки регулярных выражений:
http://www.quanetic.com/Regex (не забудьте выбрать ereg (POSIX) вместо preg (PCRE)!)