2016-12-20 3 views
0

Я пытаюсь реализовать систему переписывания URL-адресов в .htaccess..htaccess Php rewrite url

Тогда вот моя цель: Если у меня есть URL-адрес этой формы: http://localhost/view.php?Id=456

Тогда я хочу, чтобы преобразовать его в: http://localhost/456

я использую это правило в HTAccess:

RewriteRule^([a-zA-Z0-9] +) $ view.php? Id = $ 1

Теперь это работает очень хорошо!

Но моя проблема, я хочу, чтобы добавить точки ид т.е. вместо 456 я могу поставить: my.book

То есть сказать: http://localhost/my.book

+0

Вам просто нужно изменить шаблон reg-x, чтобы позволить периоды, или, возможно, просто все –

ответ

0
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^([a-zA-Z0-9\.]+)$ view.php?id=$1 [QSA,L] 

Вам нужно RewriteCond %{REQUEST_FILENAME} !-f до RewriteRule линии, чтобы сообщить серверу, что RewriteRule написано ниже, которая будет выполнено, если входные данные в URL не является действительным файл. Поскольку сервер ищет файл, соответствующий вводу, который вы передаете в URL-адресе, а также он не будет работать, если вы передадите my.book в URL-адрес, поскольку веб-сервер распознает . как префикс для расширения, например .php или .html, или так, Not Found ошибка, если нет файла с именем my.book. Таким образом, вам также необходимо избежать . в URL.

Чтобы . «S в входе, вам нужно добавить . с управляющей последовательностью \ в классе символов группы, как ^([a-zA-Z0-9\.]+)$. Обратите внимание, что это может привести к экранированию расширения в URL-адресе, то есть передача view.php в URL-адресе не приведет к фактическому файлу. Скорее, это будет рассматриваться как значение в строке запроса.

+0

Большое спасибо за вашу поддержку Все прошло отлично! –

+0

Добро пожаловать! Если бы мой ответ сработал для вас, не стесняйтесь принять ответ. :) – Perumal

0

Попробуйте это:

RewriteRule ^([a-zA-Z0-9\.]+)$ view.php?Id=$1 

В основном что я сделал, я добавил \. с вашим рисунком. Это позволит убедиться, что ваше регулярное выражение соответствует любой букве (малым/кол-вом), десятичным числам и периодам (.). Надеюсь, что это помогает :)

+0

Это не сработает. Также не полезно, поскольку вы не объясняете, что происходит. Вместо этого вы можете занять 10 секунд, чтобы опубликовать «почему» (объясните регулярное выражение), а также правильное решение (подсказка: удалите пробелы). Тогда OP не нужно будет публиковать здесь снова, и другие люди, которые ищут ответы, могут узнать. – Robbie

+0

@Robbie updtaed –

+0

Спасибо. Полезно! – Robbie