Мод Переписать Вопрос - PullRequest
       3

Мод Переписать Вопрос

0 голосов
/ 17 декабря 2010

Хорошо, прошло много времени с тех пор, как я использовал переписывание модов, и я создал пару модификаций модов некоторое время назад и забыл, что они сделали, и мне было интересно, что именно делает этот фрагмент кода. Может кто-нибудь, пожалуйста, будьте настолько подробным, насколько это возможно, относительно того, что делает фрагмент. Спасибо!

Вот мой код переписывания модов.

RewriteRule ^/?sitemap.xml?$ sitemap.php [L,NC,QSA]

Ответы [ 2 ]

2 голосов
/ 17 декабря 2010

В основном все, что ищет sitemap.xml, будет передано в sitemap.php, но без показа пользователю, то есть URL-адрес не изменится для пользователя. Вот часть документации:

Взято из Apache mod_rewrite Флаги :

RewriteRule pattern target [Flag1,Flag2,Flag3]

L | последний

Флаг [L] приводит к тому, что mod_rewrite прекращает обработку набора правил. В большинстве случаев это означает, что если правило соответствует, дальнейшие правила не будут обрабатываться.

Если вы используете RewriteRule в файлах .htaccess или в разделах, важно иметь некоторое представление о том, как обрабатываются правила. Упрощенная форма этого заключается в том, что после обработки правил переписанный запрос передается механизму синтаксического анализа URL-адреса, чтобы выполнить с ним все возможное. Возможно, что при обработке переписанного запроса файл или раздел .htaccess могут встретиться снова, и, таким образом, набор правил может быть снова запущен с самого начала. Чаще всего это происходит, если одно из правил вызывает перенаправление - внутреннее или внешнее, что приводит к тому, что процесс запроса запускается заново.

Поэтому важно, если вы используете директивы RewriteRule в одном из этих контекстов, чтобы вы предприняли явные шаги, чтобы избежать зацикливания правил, а не рассчитывали только на флаг [L], чтобы прекратить выполнение серии правил, как показано ниже.

Приведенный здесь пример переписывает любой запрос в index.php, предоставляя исходный запрос в качестве аргумента строки запроса для index.php, однако, если запрос уже для index.php, это правило будет пропущено.

RewriteCond %{REQUEST_URI} !index\.php RewriteRule ^(.*) index.php?req=$1 [L]

NC | NoCase

Использование флага [NC] приводит к тому, что RewriteRule сопоставляется без учета регистра. То есть не имеет значения, отображаются ли буквы в верхнем или нижнем регистре в сопоставленном URI.

В приведенном ниже примере любой запрос файла изображения будет передан на ваш выделенный сервер изображений. Совпадение не чувствительно к регистру, поэтому допустимы оба файла .jpg и .JPG, например.

RewriteRule (.*\.(jpg|gif|png))$ <a href="http://images.example.com" rel="nofollow">http://images.example.com</a>$1 [P,NC]

QSA | qsappend

Когда заменяющий URI содержит строку запроса, RewriteRule по умолчанию ведет к удалению существующей строки запроса и замене ее новой сгенерированной. Использование флага [QSA] приводит к объединению строк запроса.

Рассмотрим следующее правило:

RewriteRule /pages/(.+) /page.php?page=$1 [QSA]

С флагом [QSA] запрос на /pages/123?one=two будет сопоставлен с /page.php?page=123&one=two. Без флага [QSA] этот же запрос будет сопоставлен с /page.php?page=123, то есть существующая строка запроса будет отброшена.

0 голосов
/ 17 декабря 2010

Когда запрашивается «sitemap.xm», вместо этого перенаправьте запрос на «sitemap.php». «L» означает оставить (или пропустить любые следующие правила)

Примечание
Флаг QSA связан с обработкой Query String (объедините старое и новое). Я ничего не мог найти о NC .

Ссылка содержит полную информацию (Apache).

...