mod_rewrite, php и файл .htaccess

Я кодирую небольшую CMS, чтобы лучше понять, как они работают, и узнать некоторые новые вещи о PHP. Однако я столкнулся с проблемой.

Я хочу использовать mod_rewrite (хотя, если у кого-то есть лучшее решение, которое я пытаюсь попробовать) для создания чистых URL-адресов, поэтому site.com/index.php?page=2 может вместо этого быть site.com/tools

По моему мнению, мне нужно изменить файл .htaccess каждый раз, когда я добавляю новую страницу, и это то, где я нахожу проблему, мой PHP продолжает говорить мне, что я не могу его обновить, потому что у него нет разрешений. Быстрый бит chmod показывает, что даже с 777 правами он не может этого сделать, я чего-то не хватает?

Мой источник для инструкций mod_rewrite в настоящее время эта страница здесь, если она важна / полезна.

Один из подходов состоит в том, чтобы переписать все на сценарий обработки

RewriteEngine on RewriteBase / # only rewrite if the requested file doesn't exist RewriteCond %{REQUEST_FILENAME} !-s # pass the rest of the request into index.php to handle RewriteRule ^(.*)$ /index.php/$1 [L] 

поэтому, если у вас есть запрос на http: // yourserver / foo / bar /

то, что вы на самом деле получаете, это запрос на http: //yourserver/index.php/foo/bar – и вы можете оставить index.php, чтобы решить, что делать с / foo / bar (используя $ _SERVER ['PATH_INFO'] – tom )

Вам нужно только изменить .htaccess в первый раз. Все будущие запросы на несуществующие файлы могут обрабатываться на PHP.

Вы также можете найти документы для mod_rewrite полезными – но держите их просто или готовы потерять много сон и волос, отслеживая непонятные ошибки.

Ваш PHP по очень очевидным причинам не сможет изменить .htaccess . Даже если вы получите это на работу, я не уверен, насколько это разумно.

Как насчет использования более абстрактной настройки в отношении правил mod_rewrite? Определите свой общий шаблон URL, как вы хотели бы его использовать. Например:

 / Объект / действие / идентификатор

Затем напишите набор правил, которые перенаправляют HTTP-запросы на страницу PHP, что, в свою очередь, принимает решение о том, какая страница должна запускаться (скажем, включив соответствующий PHP-скрипт).

 RewriteRule ^ / (\ w +) /? (\ W +)? /? (\ D +)? $ /index.php?object=$1&action=$2&id=$3 [nocase]

Таким образом, вам не придется обновлять .htaccess очень часто, но все же быть гибким.