Я собираюсь преобразовать свой сайт со многими статическими html-страницами на сайт, управляемый базой данных. Моя проблема заключается в том, что я не хочу потерять то, что уже проиндексировал Google, поэтому я хотел бы переписать запросы, отправляемые через php script, которые ищут путь к файлу для содержимого в базе данных. Я понимаю, что mod_rewrite лучше всего будет служить этой цели, к сожалению, я никогда не использовал его, поэтому я немного потерял.
Что у меня:
www.domain.com/index.html
www.domain.com/page.html?var=123&flag=true
www.domain.com/folder/subfolder/
www.domain.com/folder/subfolder/index.html
www.domain.com/folder/subfolder/new/test.html
www.domain.com/folder/subfolder/new/test.html?var=123&flag=true
То, что я хочу (мне также, вероятно, нужно указать urlencode) (передача полного uri также в порядке):
www.domain.com/index.php?page=/index.html OR www.domain.com/index.php?page=www.domain.com/index.html
www.domain.com/index.php?page=/page.html?var=123&flag=true
www.domain.com/index.php?page=/folder/subfolder/
www.domain.com/index.php?page=/folder/subfolder/index.html
www.domain.com/index.php?page=/folder/subfolder/new/test.html
www.domain.com/index.php?page=/folder/subfolder/new/test.html?var=123&flag=true
Вот мои первые идут на это:
RewriteEngine On # Turn on rewriting
RewriteCond %{REQUEST_URI} .* # Do I even need this?
^(.*)$ /index.php?page=$1
Идеи? Спасибо заранее:)
Edit:
Итак, я попытался реализовать решение Ragnar, но я продолжал получать 500 ошибок, когда я использую "RewriteCond $1" или включаю "/" в последней строке. Я установил файл test.php, который будет эхо GET _ [ "page" ], поэтому я знаю, что переписывание работает правильно. До сих пор я могу получить некоторые правильные результаты (но только когда я не в корне), например:
RewriteEngine on
RewriteRule ^page/(.*)$ test.php?page=$1 [L]
Если я перейду на страницу http://www.domain.com/page/test/subdirectory/page.html?var=123, он выведет 'test/subdirectory/page.html' (отсутствует строка запроса, которая мне нужна). Однако, если я использую этот пример:
RewriteEngine on
RewriteRule ^(.*)$ test.php?page=$1 [L]
Если я нахожусь http://www.domain.com/page/test/subdirectory/page.html?var=123, он выведет только 'test.php', который будет запутанным. Мысли?
Изменить # 2:
Кажется, я все это делал неправильно. Я просто хотел использовать полный uri на моей странице php script. Окончательное решение для работы с тем, что я хочу, следующее:
Options +FollowSymlinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /test.php
Тогда в моем php script я могу использовать $_SERVER ['REQUEST_URI'], чтобы получить то, что мне нужно. Я знал, что это должно быть проще, чем то, что я пытался...