Jump to content
  • 0

mod rewrite


Fenix
 Share

Question

Столкнулся с необходимостью ЧПУ. И тут встретился с одной проблемой - нормальной статьи по правилам построения этих регулярных выражений. Встречали ли вы статью, где все понятно написано? Если да, то дайте пожалуйста ссылку.

Link to comment
Share on other sites

25 answers to this question

Recommended Posts

  • 0
Столкнулся с необходимостью ЧПУ. И тут встретился с одной проблемой - нормальной статьи по правилам построения этих регулярных выражений. Встречали ли вы статью, где все понятно написано? Если да, то дайте пожалуйста ссылку.

http://en.wikipedia.org/wiki/Regular_expression

Начните отсюда. Там есть ссылки на различные документации.

Link to comment
Share on other sites

  • 0
Как я могу занятся практикой, если я не знаю теории.

Теория проста как двери. Представь себе шапку. Тебе нужно из толпы найти всех, чья голова подходит под шапку.

Если выбор слишком большой, добавляешь трусы, например. Ищешь по двум параметрам.

Другой пример, у тебя стоит шеренга людей. Нужно найти пару людей, перебирая каждого в шеренге, чьи головы могут носить одинаковые шапки.

Link to comment
Share on other sites

  • 0
Теория проста как двери. Представь себе шапку. Тебе нужно из толпы найти всех, чья голова подходит под шапку.

Если выбор слишком большой, добавляешь трусы, например. Ищешь по двум параметрам.

Другой пример, у тебя стоит шеренга людей. Нужно найти пару людей, перебирая каждого в шеренге, чьи головы могут носить одинаковые шапки.

Кому-то пора книги писать :)

Link to comment
Share on other sites

  • 0
все регулярные выражения просты. говори что надо, мы объясним.

Я немогу понять принцип построения регулярных выражений в RewriteRule. У меня появился ещё один вопрос. Можно ли запретить доступ к одной папке целиком? Причем запретить всем, но чтобы файлы из этой папки можно было подключать. Будь это пхп файлы, или какой-нибудь скрипт, вроде WYSIWYG редактора.

Link to comment
Share on other sites

  • 0

можно

создаешь .htaccess в каталоге который надо закрыть, и пишешь там

Deny from all

если там будут лежать css файлы они не загрузятся, php файлы можно подключить через

require/include/require_once/include_once 'директория/файл';

если хочешь чтобы был доступ ко всем файлам, но нельзя было просматривать содержимое папки, то

Options -Indexes

а в регулярных выражениях ничего сложного

вот

<IfModule mod_rewrite.c>
RewriteEngine On

// тут сами регулярки
</IfModule>

в моем блоге можешь посмотреть примеры, там есть Человеку Понятный Урл (ЧПУ) на 2 странице, если будет не понятно спрашивай

Link to comment
Share on other sites

  • 0
можно

создаешь .htaccess в каталоге который надо закрыть, и пишешь там

Deny from all

Пробывал. Неработает

а в регулярных выражениях ничего сложного

вот

<IfModule mod_rewrite.c>
RewriteEngine On

// тут сами регулярки
</IfModule>

Я не такой тупой как тебе кажется. Это я без проблем написал ещё вчера. Мне нужно как строятся сами регулярки.

Link to comment
Share on other sites

  • 0
Пробывал. Неработает

Я не такой тупой как тебе кажется. Это я без проблем написал ещё вчера. Мне нужно как строятся сами регулярки.

Должно работать

Почитай пост в блоге моем, все поймешь как строятся.

Link to comment
Share on other sites

  • 0
Почитай пост в блоге моем, все поймешь как строятся.

Прочитал, но не совсем понятно.

Можешь сделать RewriteRule чтобы заменять выражение "index.php&app=controler&view=modview&data=16" на выражение "/controler/modview/16/" причем выражение controler, modview, 16 - меняющиеся. И если controler и modview одинаковы, отображалось только одно, например controler.

Link to comment
Share on other sites

  • 0
вот

RewriteRule ^/([A-z]+)/([A-z]+)/([0-9]+)/?$ index.php?app=$1&view=$2&data=$3

второго не понял, объясни поподробнее

Как я понял [A-z] и [0-9] это то что может быть в выражении, да?

$1 - это указание что её на подставлять в скобку под номером после "$"?

Что означает "+" после [A-z] или [0-9]?

За второе:

Например мы имем такую строку index.php&app=admin&view=admin&data=16". По правилу оно заменится на выражение "/admin/admin/16/" что не очень красиво. В таких случая совпадения должно одно повторяющиеся выражение убраться, чтобы url был вида "/admin/16/"

И у меня ещё вопрос. Эсли в каком-то выражении может встречаться и цифры, и буквы (например index.php?text=text13), то как это должно быть записано в регулярке. "([A-z][0-9]+)"?

Link to comment
Share on other sites

  • 0
Как я понял [A-z] и [0-9] это то что может быть в выражении, да?

да

$1 - это указание что её на подставлять в скобку под номером после "$"?

да, именно так

Что означает "+" после [A-z] или [0-9]?

+ это 1 или более символов, если вместо + поставить * то 0 или более.

И у меня ещё вопрос. Эсли в каком-то выражении может встречаться и цифры, и буквы (например index.php?text=text13), то как это должно быть записано в регулярке. "([A-z][0-9]+)"?

то так ([A-z0-9]+)

За второе:

Например мы имем такую строку index.php&app=admin&view=admin&data=16". По правилу оно заменится на выражение "/admin/admin/16/" что не очень красиво. В таких случая совпадения должно одно повторяющиеся выражение убраться, чтобы url был вида "/admin/16/"

я думаю что это нереально реализовать так, для админ можно написать отдельную регулярку

RewriteRule ^admin/([0-9]+)/?$ index.php?app=admin&view=admin&data=$1

Link to comment
Share on other sites

  • 0
да

да, именно так

+ это 1 или более символов, если вместо + поставить * то 0 или более.

то так ([A-z0-9]+)

я думаю что это нереально реализовать так, для админ можно написать отдельную регулярку

RewriteRule ^admin/([0-9]+)/?$ index.php?app=admin&view=admin&data=$1

Спасибо. Для таких случаев совпадения нужно будет прописывать отдельно для каждого случая?

Link to comment
Share on other sites

  • 0

У меня вопрос:

К примеру работают ссылки вида /read/1/ и ссылки вида /read.php?page=1

Т.е. фактически у всех желающих есть доступ к файлам .php, и злоумышленник может этим воспользоваться. Как сделать так, чтобы ссылки вида /read.php?page=1 не работали и ссылались на страницу 404?

Link to comment
Share on other sites

  • 0
У меня вопрос:

К примеру работают ссылки вида /read/1/ и ссылки вида /read.php?page=1

Т.е. фактически у всех желающих есть доступ к файлам .php, и злоумышленник может этим воспользоваться. Как сделать так, чтобы ссылки вида /read.php?page=1 не работали и ссылались на страницу 404?

RewriteRule ^papka/([A-Za-z]+).php$ error.php

papka/ - это папка где лежат все скрипты, можно просто корень сайта указать для запрета доступа к файлам в корне с расширением .php.

Сам error.php:

<? 
echo "<HTML><HEAD><META HTTP-EQUIV='Refresh' CONTENT='0; URL=http://".$_SERVER['HTTP_HOST']."/'></HEAD></HTML>";
?>
<html>
<head>
<title>.404</title>
<style type="text/css"><!--
.style1 {font-size: 100px;font-weight: bold;}
--></style>
</head>
<body>
<center><span class="style1"><font color="#009900">.404</font></span></center>
</body>
</html>

Link to comment
Share on other sites

  • 0

с физическими файлами все понятно, и запрет на них есть

Не понятно как запретить пользователю не получать доступ к странице вида /read.php?page=1

т.е. сделать так, чтобы исполнялись только те ссылки, которые я пропишу в .htacсess (например /read/1/)

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy