.htacces RewriteRule не работает - PullRequest
       1

.htacces RewriteRule не работает

1 голос
/ 06 февраля 2011

Привет, люди @ stackoverflow,

Возможно, у меня есть фундаментальное неправильное представление о работе RewriteRule. А может и нет. Тем не менее, я пытаюсь понять это в течение двух дней без какого-либо прогресса.

Это текущая ситуация:

У меня есть сайт Joomla с включенным SEF и mod_rewrite.

Это приводит к URL: mysite.com/index.php?option=com_remository&Itemid=7

переписывается на:

mysite.com / подкаталог / подкаталог / 0000-Business-файлы /

Это строки, которые в настоящее время используются в моем .htaccess (все стандартные Joomla)

Options +FollowSymLinks
RewriteEngine On

RewriteRule ^([^\-]*)\-(.*)$ $1 $2 [N]

RewriteCond %{QUERY_STRING} mosConfig_[a-zA-Z_]{1,21}(=|\%3D) [OR]
RewriteCond %{QUERY_STRING} base64_encode.*\(.*\) [OR]
RewriteCond %{QUERY_STRING} (\<|%3C).*script.*(\>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]
RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2})
RewriteRule ^(.*)$ index.php [F,L]

# RewriteBase /


RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/index.php
RewriteCond %{REQUEST_URI} (/|\.php|\.html|\.htm|\.feed|\.pdf|\.raw|/[^.]*)$  [NC]
RewriteRule (.*) index.php

RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]

Вот чего я хочу достичь:

Когда посетитель использует этот URL mysite.com / подкаталог / подкаталог / 0000 Бизнес-файлы /

это должно привести его к правильной странице.

Хотя я знаю, что использовать URL-адреса в URL - не самая лучшая идея, я сталкиваюсь с тем фактом, что эти «просторные» URL-адреса используются в PDF, который уже выпущен.

Я думал, что смогу использовать mod_rewrite, чтобы переписать эти URL. Но все, что я получаю, это «страница не найдена»

Я добавил это правило поверх файла .htaccess:

RewriteRule ^([^\-]*)\-(.*)$ $1 $2 [N]

Но это не работает. Что я делаю неправильно? Или, также возможно, я упускаю момент, когда и как использовать mod_rewrite?

ргдс, Эрик

1 Ответ

0 голосов
/ 23 февраля 2012

Во-первых, стандартное поведение apache обычно разрешает прямые URL-адреса, которые сопоставляются с базовой файловой системой (относительно корня документа), и вы должны использовать RewriteRule, когда хотите обойти это. Глядя на ваш вопрос, кажется, что вы хотите просмотреть файловую систему, и поэтому вы должны не использовать RewriteRule.

Если mysite.com/sub+diretory/sub+directory/0000+Business+files/ не работает (без вашего правила), я задаюсь вопросом: у вас есть такая структура каталогов на вашем сервере? То есть это выглядит так?

[document root]/index.php
[document root]/sub directory/sub directory/0000 Business files/

Если нет, я не уверен, что понимаю, чего вы пытаетесь достичь, и что вы подразумеваете под тем, что посетитель "ведет на нужную страницу". Не могли бы вы предоставить пример URL-адреса, который предоставляет пользователь, и соответствующий URL-адрес (или путь к файловой системе), который должен обслуживаться пользователем.

Что касается вашего правила перезаписи, я даже не уверен, что оно разрешено, и я удивлен, что вы не получили 500 Internal Server Error. RewriteRule принимает два аргумента (сопоставление шаблона и подстановки) и, возможно, несколько флагов, но из-за пробела между $ 1 и $ 2 вы предоставляете три аргумента (+ flags).

РЕДАКТИРОВАТЬ: Я неправильно понял шаблон, но он по-прежнему не имеет особого смысла. Он сопоставляется с любым URL, в котором есть хотя бы одна черточка, а затем выбирает части до и после первой черты. Таким образом, для URL-адреса, подобного «this-is-a-url-path / to-a-file / on-the-server», $ 1 будет «this», а $ 2 будет «is-a-url-path / to» -a-файл / на-сервер». Опять же, если бы у меня были примеры URL-адресов и их соответствующие изменения, я мог бы помочь вам найти правильный шаблон.

Кстати, пробелы в URL запрещены, но браузер и сервер, вероятно, выполняют некоторую негласную работу, позволяя правильно подобрать ваши PDF-файлы.

...