Я должен делать что-то ужасно неправильно, потому что, неважно, как я пробую или гуглю его, я не могу найти ответ :(
Так, я хочу иметь URL как http://localhost/BLUEPRINT/list/857 для фактической загрузки совершенно рабочего URL как это: http://localhost/BLUEPRINT/list.php?lid=857
Я могу записать переписать правило в .htaccess файле, и я могу считать переменную крышки. Проблема состоит в том, что все пути в list.php относительны. CSS, изображения, JavaScript e.t.c. Таким образом, когда благоприятный для SEO URL загружается, все те объекты смотрят в BLUEPRINT/list/857/...
Так, например, это: на самом деле что-то вроде этого при запросе благоприятного для SEO URL:
Таким образом, что я могу сделать?
Я мог, вероятно, попытаться преобразовать все пути на странице (страницах) для укоренения родственника (напр. "/BLUEPRINT/images/logo.png") вместо родственника. Но на странице существуют десятки и даже если я сделаю, то они не будут работать над фактическим сервером, потому что там это должны быть "/изображения" вместо "/BLUEPRINT/images". Таким образом, я не мог только загрузить свои файлы на фактический сервер.
Каковы мои опции? Как всем этим замечательным сценариям там нравится Wordpress, joomla, e.t.c. решают эту проблему? Что, черт возьми, я делаю неправильно? Это сводит меня с ума!
У ваших новых URL-адресов другая база префикс пути. Это означает, что относительные пути URL разрешаются по-другому. Ссылка images / logo.png
теперь преобразована в /BLUEPRINT/list/images/logo.png
вместо /BLUEPRINT/images/logo.png
.
Чтобы исправить это, используйте в ссылках абсолютные пути URL, например:
<img src="/BLUEPRINT/images/logo.png" />
Либо, если вы не хотите добавлять базовый путь URL / BLUEPRINT /
ко всем ссылочным элементам, установите базовый URL с base
:
<base href="/BLUEPRINT/" />
Теперь относительные пути URL разрешаются из этого базового URL вместо текущего URL. Но обратите внимание, что изменение базового URL влияет на все относительных URL.
Вы можете написать условие, которое позволит запросам к CSS, JS и другим путям проходить через вас и игнорировать ваши правила перезаписи для list.php. Вот пример.
# Turn on URL rewriting
RewriteEngine On
# If your URL is www.example.com/, use /
RewriteBase /
# Find CSS and JS paths
RewriteCond $1 ^(BLUEPRINT/css|BLUEPRINT/js)
# No rewriting
RewriteRule ^(.*)$ - [PT,L]
Вот отличный учебник от Apache с массой примеров: http://httpd.apache.org/docs/2.2/misc/rewriteguide.html
Удачи!
EDIT: Еще одна хорошая ссылка от Apache - документация по mod_rewrite. http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html Выполните текстовый поиск по 'passthrough'.
Еще одна часть правила RewriteRule, на которую следует обратить внимание, это тире '-'. Это означает, что "подстановка не должна производиться".
Наконец, я добавил в пример правила RewriteEngine и RewriteBase. Это должно сделать его более полным.
Вы пробовали применить правило «RewriteBase»?
http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html#rewritebase