Перезапись URL с использованием .htaccess - PullRequest
1 голос
/ 17 сентября 2011

Чтобы изменить URL /mobiles.php?id=5 на /mobiles/5

Содержимое файла .htaccess выглядит следующим образом:

Options +FollowSymlinks
RewriteEngine on

RewriteRule /mobiles/$1 ^/mobiles.php?id=([0-9]+)$

Но все равно он показывает /mobiles.php?id=5 в адресебар.Пожалуйста помоги.Что-нибудь еще нужно добавить в файл .htaccess?

Примечание:

  1. Модуль mod_rewrite включен
  2. Я перезапустил сервер Apache после внесения измененийв файл .htaccess
  3. .htaccess находится в папке htdocs Apache.
  4. Я использую Windows + PHP + Apache + MySQL

Ответы [ 4 ]

1 голос
/ 17 сентября 2011

Если я правильно понимаю, вы хотите

  • Внутреннее перенаправление /mobiles/5 на /mobiles.php?id=5
  • Также перенаправить браузер на /mobiles/5, если пользователь переходит на /mobiles.php?id=5

Для этого вам нужно 2 правила: одно для внутренней перезаписи URL для первого регистра и второго для перенаправления браузера.

Вы можете сделать это так:

RewriteEngine on

# for internal rewrite
RewriteRule ^/?mobiles/([0-9]+)/?$ /mobiles.php?id=$1 [L]

# for browser redirect
RewriteRule ^/?mobiles\.php\?id=([0-9]+)$ /mobiles/$1/ [R,L]
1 голос
/ 17 сентября 2011

Если вас беспокоит только то, что старый адрес остается в адресной строке, и вы хотите, чтобы это не , попробуйте добавить [R] в конце.

RewriteRule ^/mobiles.php?id=([0-9]+)$ /mobiles/$1 [R]

Вы действительно видели правильную страницу?

Кстати, правила переписывания обычно идут другим путем.Я ожидал бы увидеть что-то вроде:

RewriteRule ^/mobiles/([0-9]+)$ /mobiles.php?id=$1 

Вы хотите, чтобы URL-адрес с параметрами запроса не отображался в адресной строке?

1 голос
/ 17 сентября 2011

Это работает для меня:

Options +FollowSymlinks

RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^mobiles/([0-9]+)$ mobiles.php?id=$1&rew [L]

RewriteCond %{QUERY_STRING} ^id=([0-9]+)$
RewriteRule ^mobiles.php$ /mobiles/%1? [R,L]

Если вы видите эту строку:

RewriteRule ^mobiles/([0-9]+)$ mobiles.php?id=$1&rew [L]

Я добавил rew переменную в строке запроса, чтобыпредотвращение попадания Apache в бесконечный цикл

Когда Apache выполняет эту строку:

RewriteCond %{QUERY_STRING} ^id=([0-9]+)$

Требуется, чтобы URL-адрес не был переписан для Apache

0 голосов
/ 17 сентября 2011

Вы делаете наоборот, должно быть:

RewriteRule ^/something/mobiles/([0-9]+)$ /something/mobiles.php?id=$1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...