mod_rewrite, php и файл .htaccess - PullRequest
       23

mod_rewrite, php и файл .htaccess

5 голосов
/ 05 ноября 2008

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

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

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

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

Ответы [ 2 ]

10 голосов
/ 05 ноября 2008

Один из подходов - переписать все в скрипт обработки

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 полезными, но не усложняйте их или готовьтесь потерять сон и выслеживать непонятные ошибки.

2 голосов
/ 05 ноября 2008

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

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

/object/action/id

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...