Может быть возможно физически исследовать кабель, не разъединяя телефонную линию путем отвинчивания пластины разъема от стены и вытаскивания его. Кто бы ни установил, это, вероятно, имело некоторый слабый остаток (~6 дюймов), которые будут наполнены в стену позади пластины. Необходимо смочь тщательно извлечь некоторые слабые, чтобы видеть, можно ли найти маркировки производителя на нем. Телефонная линия должна смочь остаться включенной все время.
2a позволит/some.dir/file из-за "." в середине. Вы могли бы хотеть что-то как !\..[1,3]
, это зависело бы от Вашего файла/структуры каталогов.
В RewriteRules нормально использовать соответствие замены вместо имен переменной:
RewriteRule (.*) /seo-urls/url-mapper.php?uri=$5 [L,QSA]
Обратите внимание, что это $5
потому что у Вас в настоящее время есть соответствие шаблоны на всем протяжении Ваших условий.
Нет необходимости в обертке
. См. этот вопрос в стеке веб-мастеров:
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]