Имитировать файловую структуру с PHP

Я запускаю PHP на общем веб-сервере Apache. Я могу редактировать файл .htaccess.

Я пытаюсь имитировать структуру файлового файла, которая на самом деле отсутствует. Например, я хотел бы получить URL-адрес: www.Stackoverflow.com/jimwiggly чтобы фактически отобразить www.StackOverflow.com/index.php?name=jimwiggly Я получил на полпути, отредактировав файл .htaccess в соответствии с инструкциями в этом сообщении : PHP: обслуживать страницы без файлов .php в файловой структуре :

 RewriteEngine on RewriteRule ^jimwiggly$ index.php?name=jimwiggly 

Это работает хорошо, поскольку строка URL по-прежнему отображает www.Stackoverflow.com/jimwiggly и правильную загрузку страницы, однако все мои относительные ссылки остаются неизменными. Я мог бы вернуться и вставить <?php echo $_GET['name'];?> Перед каждой ссылкой, но похоже, что может быть лучший способ. Кроме того, я подозреваю, что весь мой подход может быть выключен, должен ли я идти об этом по-другому?

Solutions Collecting From Web of "Имитировать файловую структуру с PHP"

Я думаю, что лучший способ сделать это – принять манипуляции с URL-образами в стиле MVC с помощью URI, а не с параметрами.

В вашем htaccess используйте:

 <IfModule mod_rewrite.c> RewriteEngine On #Rewrite the URI if there is no file or folder RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php?/$1 [L] </IfModule> 

Затем в вашем PHP Script вы хотите разработать небольшой класс для чтения URI и разделить его на сегменты, такие как

 class URI { var $uri; var $segments = array(); function __construct() { $this->uri = $_SERVER['REQUEST_URI']; $this->segments = explode('/',$this->uri); } function getSegment($id,$default = false) { $id = (int)($id - 1); //if you type 1 then it needs to be 0 as arrays are zerobased return isset($this->segments[$id]) ? $this->segments[$id] : $default; } } 

Использовать как

http://mysite.com/posts/22/robert-pitt-shows-mvc-style-uri-access

 $Uri = new URI(); echo $Uri->getSegment(1); //Would return 'posts' echo $Uri->getSegment(2); //Would return '22'; echo $Uri->getSegment(3); //Would return 'robert-pitt-shows-mvc-style-uri-access' echo $Uri->getSegment(4); //Would return a boolean of false echo $Uri->getSegment(5,'fallback if not set'); //Would return 'fallback if not set' 

Теперь в MVC. Обычно, как http://site.com/controller/method/param, но в приложении, отличном от MVC, вы можете делать http://site.com/action/sub-action/param

Надеюсь, это поможет вам двигаться вперед с вашим приложением.