Как я могу написать приведенное ниже правило перезаписи htaccess для разных URL-адресов

#apache #mod-rewrite

#apache #мод-перезапись

Вопрос:

Я работаю над веб-сайтом, созданным с использованием PHP.

Среда разработки — Windows (с использованием xampp)

Страницы веб-сайта отображаются в соответствии со значением переменной «page», которую мы передаем в index.php файл в качестве переменной url.

т. е. http://example.com/index.php?page=xyz

Приведенный выше URL-адрес указывает на xyz.php файл

Имеется около 50 страниц (может быть увеличено в будущем).

Я хочу, чтобы мои URL-адреса были такими

http://example.com/xyz

чтобы это сработало, я написал следующее .htaccess rule в файле .htaccess (в корневой папке проекта)

 RewriteRule ^([^/]*)$ /index.php?page=$1 [L]
  

Но это вообще не работает.

Другой URL-это http://example.com/index.php?page=abcamp;name=gauravamp;id=10amp;page_no=2

Я хочу, чтобы этот URL отображался следующим образом

http://example.com/abc/gaurav/10/2

Существует много разных форм URL-адреса, который я привел в качестве примера, но переменная page всегда будет присутствовать в URL-адресе.

Если я предоставлю правило для обоих вышеуказанных URL-адресов, то ничего не сработает (отображается внутренняя ошибка сервера 500)

Пожалуйста, помогите мне написать это правило.

Ответ №1:

Попробуйте

 RewriteRule ^([^/] )$ index.php?page=$1 [L]
  

Итак, вместо звезды. Он будет использовать все символы, пока не найдет косую черту (/)

Комментарии:

1. Спасибо за вашу помощь, но это не работает ошибка внутреннего сервера 500.

2. @Gaurav Sharma Извините, моя ошибка. Я изменил свой код в сообщении выше. Это работает в моей локальной настройке. Я настоятельно рекомендую, чтобы это был последний RewriteRule в вашем htaccess.

3. Теперь значение переменной url «страница» полностью потеряно. Теперь это значение является статическим для всех страниц, т.Е. index.php.. Также приведенное выше правило не работает для этого URL » example.com/xyz/gaurav/10 »

4. Если вы прочтете мой ответ, вы увидите, что он будет использовать все символы, пока не найдет косую черту. Если вам нужно больше переменных, вам нужно их добавить. RewriteRule ^([^/] )/([^/] )/$ index.php?page = $ 1 amp; var2 = $ 2 и т.д.

5. и что произойдет, когда переменных станет меньше? т.е. я упомянул 4 переменные в правиле перезаписи, и я предоставляю только 2 из них.