Как я могу использовать внешнюю информацию в URL переписывает? - PullRequest
0 голосов
/ 07 ноября 2011

Надеюсь, некоторые из вас .htaccess гуру могут помочь мне с этим. Я никогда раньше не тратил время на возня с .htaccess, поэтому я немного растерялся.

В основном я хочу взять ссылку, такую ​​как example.com/index.php?id=3 и преобразовать его в http://example.com/pagename/

Я могу легко изменить его так, чтобы ссылка конвертировалась в http://example.com/directory/3 или что-то в этом роде, но я не совсем понимаю, как люди добиваются того изменения, которое я ищу. Я знаю, что Wordpress делает что-то похожее с их URL, но как они получают доступ к информации об имени сообщения?

1 Ответ

0 голосов
/ 07 ноября 2011

Wordpress делает это, переписывая все, что не разрешается как файл или каталог, в index.php, это выглядит так:

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

И index.php читает запрошенный URI и выясняет, что с ним делать. В то же время WordPress знает, что эти URL-адреса переписываются, поэтому он отображает страницы с чистыми SEO-дружественными URL-адресами, такими как http://example.com/pagename/.

.

Для вашего примера, сам mod_rewrite не сможет узнать, что id = 3 соответствует имя_папки , если вы не закодируете несколько отдельных RewriteRules. Что вы можете сделать, это заставит index.php принять имя_папки , чтобы ваше правило выглядело примерно так:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ /index.php?page=$1 [L]

Теперь нужно создать чистые SEO-дружественные URL в вашем контенте. В системах управления контентом сами страницы обычно хранятся в базе данных под каким-либо идентификатором. Скажем, страница «Тестовая страница» с идентификатором в базе данных как «5», созданная 10 октября 2011 года. Когда CMS необходимо сгенерировать ссылку, она просматривает базу данных и создает ссылку как /2011/10/Test_Page.

Поэтому, когда вы переходите, скажем, на первую страницу, index.php генерирует ссылки на все свои страницы и для «Тестовой страницы», ссылка говорит /2011/10/Test_Page, и когда кто-то нажимает на эту ссылку, apache использует правило например RewriteRule ^([0-9]+)/([0-9]+)/(.+)$ /index.php?year=$1&month=$2&title=$3 [L], чтобы переписать URL-адрес на /index.php?year=2011&month=10&title=Test_Page. Сценарий index.php ищет в базе данных правильную страницу и возвращает ее в браузер. Это будет отличаться для каждой CMS. По сути, .htaccess не будет знать ничего, что хранится в вашей базе данных, но он может перезаписывать ссылки, чтобы требуемая информация (например, «id» или «page») передавалась в сценарий. Сценарий сам решает, какую страницу возвращать и , чтобы генерировать чистые SEO-дружественные ссылки на этой странице.

...