Заменяю ссылки вида somehost/index.php?Page_ID=name на somehost/index/name Файл .htaccess Код (Text): RewriteEngine On Options +FollowSymlinks RewriteBase / RewriteRule ^(.*)index/(.*)$ $1index.php?Page_ID=$2 Не знаю, оптимально ли это делаю, но работает, $_GET["Page_ID"] в index.php передается. По крайней мере, по PHP: echo $_GET["Page_ID"]; выводится name. Но перестает подключаться файл стилей Код (Text): <link href="Common/main2.css" rel="stylesheet" type="text/css"> Не понимаю почему? Если в index.php задать в явном виде PHP: <?$Page_ID=name;?> , то все работает
с mod_rewrite не связано ... поправил Код (Text): <link href="Common/main2.css" ...> на Код (Text): <link href="/Common/main2.css" ...> заработало. Правда все равно не понятно почему раньше работало при запуске index.php, а при переходе по ссылке не работало ...
Видимо так, все-таки, если я правильно понял что нужно. Код (Text): RewriteRule ^index/(.*)/?$ index.php?Page_ID=$1
Спасибо. Т.е., правильно ли я понимаю, если у меня все ссылки вида somehost/index/name, то эту ("/?") проверку можно убрать? Если ее оставить, то будут допустимы обращения по адресу somehost/index/name/
копайте в сторону относительных и абсолютных путей. лучше не убирать. в случае с "/?" будут допустимы ссылки и со слэшами на конце, и без них.
Разницу между относительными и абсолютными путями понимаю вроде бы ("Common/main2.css" - абсолютный, "/Common/main2.css" - относительно корневого каталога, "../Common/main.css" - относительно каталога рангом выше. Эт я на всякий случай свое понимание проверяю.. ). Может быть неправильно объяснил: Линк на файл стилей сидит в шаблоне, который вызывается из index.php . Так вот если запускал index.php обращением к адресу localhost/index.php?Page_ID=name, то нужная страница открывалась, НО файл стилей не подключался. А если прописывал в index.php строчку $Page_ID=name; то подключался. Вот мне и не понятно как подключение файла стилей зависит от того каким образом переменная $Page_ID попадает в скрипт ... поэтому думал, что может чего-то с mod_rewrite намудрил ...
заблуждаешься... "/Common/main2.css" - абсолютный путь. "Common/main2.css" - путь, относительно текущего каталога. лучше указывать абсолютные пути.
ну вот и файл стилей пытался подключиться отсюда: localhost/index/name/Common/main2.css относительно localhost/index/name ... но его там нет.
Вроде просветляется .. большое спасибо. ЗЫ. Примерял абсолютность и относительность к физическому расположению файлов, а не к адресу запроса ... заблуждался
Сменил идеологию организации внутренних ссылок. Раз все-равно приходится обрабатывать GET-параметры ссылок в index.php, то почему бы сразу не перенаправлять все запросы на index.php в ЧПУ виде, а затем разбирать URI и формировать вывод. Горбунов Олег давал ссылку на описание как это реализовать с помощью .htaccess. Я пару дней повозился не получается. Может быть действительно ForceType не работает, если PHP подключен не как модуль, может руки кривые - не знаю . Сделал это через mod_rewrite: Код (Text): RewriteEngine On Options +FollowSymlinks RewriteBase / # всех входящих не с myhost на index.php RewriteCond %{HTTP_REFERER} !http://myhost.* RewriteRule .* index.php # для разрешения внутренних обращений например к файлам стиля или рисункам .. RewriteCond %{HTTP_REFERER} http://myhost.* RewriteRule !(Common/.*) index.php Вот вторая часть (для внутренних обращений) мне и не нравится.. Т.е. нужно либо все подключаемые по http файлы хранить в одном каталоге Common, либо для каждого нужного каталога прописывать разрешение в mod_rewrite. Собственно, это вопрос
Код (Text): RewriteEngine on Options +FollowSymlinks RewriteCond %{REQUEST_FILENAME} !-s RewriteCond %{REQUEST_FILENAME} !-d RewriteRule .* index.php имхо, так удобнее. ps. подключаемые с помощью php файлы, обрабатываются вообще то не через http
У меня ссылки вида myhost/path/to/somewhere. Они на самом деле короче (myhost/somewhere), но это не меняет сути дела. Если somewhere совпадает с локальной папкой на сервере (например myhost/home и папка home), то в Вашем варианте откроется папка. Я имел ввиду обращение через href="http:// ..." файл стилей, например, (в этой ветке с этого и начал вопросы) ... или, например, рисунок <img src="/path/to/Pic">
а ты код мой вообще посмотрел ? ) Код (Text): RewriteCond %{REQUEST_FILENAME} !-s RewriteCond %{REQUEST_FILENAME} !-d Наверное, не для красоты )
тогда не очень понятна твоя реакция. ты ж ничего не сказал, проверял ты или нет, если проверял, что именно не работает, если не работает. подробности в студию.
Вроде бы старался все понятно объяснить. Мой вариант - если не с моего хоста, то на index.php, далее разбираю URI и выдаю нужную страницу. Чтобы подгружался стиль и картинки добавил второе правило. В твоем варианте, если я захожу с localhost на http://myhost/home , то открывается не страница home, а папка home на сервере.
так, давай разбираться. что я не совсем понимаю, что именно тебе нужно. почему есть оговорка - если не с моего хоста. ---- что делает мой код - проверяется является ли путь каталогом проверяется является ли путь файлом если условия выше ложны, то все запросы валятся на index.php. я правильно понимаю, что такой вариант тебя не устраивает ? если не устраивается, сорри, я неверно понял, что именно тебе нужно. -- ps. Олег, не сказал, бы что это проще Впрочем - каждому свое )