2010-12-17 4 views
0

Хорошо, это было время, так как я использовал mod rewrite, и я создал пару мод-переписаний еще некоторое время назад и забыл, что они сделали, и мне было интересно, что именно делает этот фрагмент кода. Может кто-то, пожалуйста, быть как можно более подробным в отношении того, что делает этот фрагмент. Благодаря!Mod Rewrite Вопрос

Вот мой код перезаписи мод.

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

ответ

2

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

Взятые из Apache mod_rewrite Flags:

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))$ http://images.example.com $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

При запросе «sitemap.xm» перенаправить запрос на «sitemap.php». «L» означает отпуск (или пропустить любые следующие правила)

ПРИМЕЧАНИЕ
Флаг QSA связан с обработкой строкой запроса (сочетает старый и новый). Я ничего не смог найти о NC.

Ссылка содержит full detail (Apache).

+0

будет ли это проходить как sitemap.xml для поисковых систем? – HELP

+0

У вызывающего не должно быть никаких указаний на то, что sitemap.xml не существует, если sitemap.php делает работу, подражая правильному содержимому xml. – frayser