Можно ли видеть что-то не так в моем .htaccess?

Может быть возможно физически исследовать кабель, не разъединяя телефонную линию путем отвинчивания пластины разъема от стены и вытаскивания его. Кто бы ни установил, это, вероятно, имело некоторый слабый остаток (~6 дюймов), которые будут наполнены в стену позади пластины. Необходимо смочь тщательно извлечь некоторые слабые, чтобы видеть, можно ли найти маркировки производителя на нем. Телефонная линия должна смочь остаться включенной все время.

0
задан 11 January 2011 в 11:32
2 ответа

2a позволит/some.dir/file из-за "." в середине. Вы могли бы хотеть что-то как !\..[1,3], это зависело бы от Вашего файла/структуры каталогов.

В RewriteRules нормально использовать соответствие замены вместо имен переменной:
RewriteRule (.*) /seo-urls/url-mapper.php?uri=$5 [L,QSA]
Обратите внимание, что это $5 потому что у Вас в настоящее время есть соответствие шаблоны на всем протяжении Ваших условий.

1
ответ дан 23 November 2019 в 12:43

Нет необходимости в обертке . См. этот вопрос в стеке веб-мастеров: https://webmasters.stackexchange.com/questions/112600/is-checking-for-mod-write-really-necessary

#1 Если запрошенный файл не является url-mapper.php (чтобы избежать . цикл htaccess)
RewriteCond %{REQUEST_FILENAME} (?

Нет необходимости в отрицательном ретроспективном выражении ( (?). Было бы предпочтительнее просто иметь регулярное выражение с отрицанием, т. е. с префиксом ! . Например: !^/url-mapper\.php$(т.е. не"/url-mapper.php") И сверить с REQUEST_URI(полный URL-путь ) вместо REQUEST_FILENAME(абсолютный путь к файловой системе).

Однако вы заявляете, что «этот файл всегда будет в корне домена», но вы переписываете в /seo-urls /url-mapper.php— который не находится в корне домена.

Таким образом, это должно быть записано строго так:

RewriteCond %{REQUEST_URI} !^/seo-urls/url-mapper\.php$

Если вы не уверены, что существует только один url- mapper.phpв вашей системе, тогда регулярное выражение может быть сокращено до !/url-mapper\.php$.

В качестве альтернативы проверьте это в шаблоне RewriteRule . Вместо этого (поскольку в настоящее время вы ничего не делаете с шаблоном RewriteRule. Это будет незначительноболее эффективным.

 #2 Если запрошенный URI не заканчивается расширением ИЛИ если URI заканчивается на .php*
RewriteCond %{REQUEST_URI} !\.(.*) [ИЛИ]
RewriteCond %{REQUEST_URI} \.php.*$ [NC]

Первое условие является слишком общим — оно перехватывает любой URL-адрес, который просто содержит точку в URL-пути, а не просто расширение файла. Также нет необходимости в подшаблоне захвата. Предполагая, что расширение файла составляет от 2 до 4 символов, тогда шаблон вроде !\.\w{2,4}$более точно уловит только расширения файлов.

Обычно регулярные выражения должны быть как можно более строгими. Второе условие, что соответствует.phpрасширениям, может быть сделано более строгим, в настоящее время оно соответствует .phpв любом местев URL-пути. Например: \.php\d{0,4}$- хотя на самом деле у вас, вероятно, есть не более 1 цифры после .php, поэтому \.php\ d?$, вероятно, было бы лучше.

Я бы также спросил, действительно ли здесь требуется флаг NC(без учета регистра). Вам действительно нужно сопоставить .PHPили .PhP?

#3 Если запрошенный URI не находится в исключенном местоположении
RewriteCond %{REQUEST_URI} !^/seo-urls\/(excluded1|excluded2)(/.*)?$

Хорошо, но завершающий (/.*)?$лишний. Вы сопоставляете все, что просто начинается /seo-urls/excluded1и т. д. Кроме того, не нужно использовать обратную косую черту (любопытно, что вы избежали средней косой черты, но не двух других).

#Затем обслуживать URI через картограф
Правило перезаписи .* /seo-urls/url-mapper.php?uri=%{REQUEST_URI} [L, QSA]

Хорошо, хотя регулярное выражение .*(которое соответствует всем) можно упростить до ^— оно подходит для всего, но на самом деле ничего не соответствует — и все что вам требуется.

Однако выше я упомянул о выполнении проверки url-mapper.phpв шаблоне RewriteRule . Итак, это будет написано:

RewriteRule !^seo-urls/url-mapper\.php$ /seo-urls/url-mapper.php?uri=%{REQUEST_URI} [L,QSA]

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

Резюме

Объединяя вышеуказанные пункты, мы имеем:

RewriteEgnine On

#2 If the requested URI does not end with an extension OR if the URI ends with .php*
RewriteCond %{REQUEST_URI} !\.\w{2,4}$ [OR]
RewriteCond %{REQUEST_URI} \.php\d?$

#3 If the requested URI is not in an excluded location
RewriteCond %{REQUEST_URI} !^/seo-urls\/(excluded1|excluded2)

#Then serve the URI via the mapper
RewriteRule !^seo-urls/url-mapper\.php$ /seo-urls/url-mapper.php?uri=%{REQUEST_URI} [QSA,L]
0
ответ дан 8 August 2020 в 18:47

Теги

Похожие вопросы