Как я могу игнорировать каталог в mod_rewrite? -- apache поле с участием mod-rewrite пол Связанный проблема

How do I ignore a directory in mod_rewrite?


74
vote

проблема

русский

Я пытаюсь иметь правила ModReWrite пропустить каталог <код> vip . Я попробовал ряд вещей, как вы можете увидеть ниже, но безрезультатно.

 <код> # BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / #RewriteRule ^vip$ - [PT] RewriteRule ^vip/.$ - [PT] #RewriteCond %{REQUEST_URI} !/vip  RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule> # END WordPress   

Как получить ModReWrite, чтобы полностью игнорировать <код> /vip/ Directory, чтобы все запросы проходят непосредственно к папке?

Обновление:

как точки ясности:

    .
  • это размещено на Dreamhost
  • Папки находятся в каталоге WordPress
  • vip / folder содержит webdav .htaccess etc (хотя я не думаю, что это важно
Английский оригинал

I'm trying to have the modrewrite rules skip the directory vip. I've tried a number of things as you can see below, but to no avail.

# BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / #RewriteRule ^vip$ - [PT] RewriteRule ^vip/.$ - [PT] #RewriteCond %{REQUEST_URI} !/vip  RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule> # END WordPress 

How do I get modrewrite to entirely ignore the /vip/ directory so that all requests pass directly to the folder?

Update:

As points of clarity:

  • It's hosted on Dreamhost
  • The folders are within a wordpress directory
  • the /vip/ folder contains a webdav .htaccess etc (though I dont think this is important
</div
     
 
 

Список ответов

131
 
vote

Попробуйте поместить это перед любыми другими правилами.

 <код> $loginId5  

Это будет соответствовать любому URI, начало <код> $loginId6 .

    .
  • <код> $loginId7 значит ничего не делать.
  • <код> $loginId8 означает, что это должно быть последним правилом; игнорировать все следующее.
  • <код> $loginId9 означает, что нет в случае (так что «VIP» также совпадает).

Обратите внимание, что он совпадает с чем-то Начало <Код> $month0 . Выражение <код> $month1 будет соответствовать <код> $month2 Но не <код> 99887776623 или <код> $month4 . <Код> $month5 может быть вашим падением. Если вы действительно хотите сделать это правильно, вы можете пойти с $month6 , чтобы вы не совпадаете <код> $month7

 

Try putting this before any other rules.

RewriteRule ^vip - [L,NC]  

It will match any URI beginning vip.

  • The - means do nothing.
  • The L means this should be last rule; ignore everything following.
  • The NC means no-case (so "VIP" is also matched).

Note that it matches anything beginning vip. The expression ^vip$ would match vip but not vip/ or vip/index.html. The $ may have been your downfall. If you really want to do it right, you might want to go with ^vip(/|$) so you don't match vip-page.html

</div
 
 
         
         
14
 
vote
 <код> $month8  

Это говорит, что если это существующий файл или каталог не прикасается к нему. Вы должны иметь возможность получить доступ к сайту.com/vip, и никакое правило перезаписи не должно происходить.

 
RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d 

This says if it's an existing file or a directory don't touch it. You should be able to access site.com/vip and no rewrite rule should take place.

</div
 
 
 
 
10
 
vote

Код, который вы добавляете, и все ответы, которые предоставляют правила / условия перезаписи, бесполезны! Код WordPress по умолчанию уже делает все, что вам нужно, чтобы:

 <код> RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L]   

Эти строки говорят: «Если это не существующий файл (<код> -f ) или каталог (<код> -d ), передайте его в WordPress. Добавление дополнительных правил, неважно, насколько конкретно Или хорошие они являются избыточными - вы уже должны быть покрыты правилами WordPress!

Так почему же они не работают ???

<Код> .htaccess в <Код> vip Directory бросает ошибку. Точное то же самое происходит, если вы защитите пароль каталога.

Вот решение:

 <код> ErrorDocument 401 /err.txt ErrorDocument 403 /err.txt   

Вставьте эти строки перед кодом WordPress, а затем создайте /err.txt. Таким образом, когда он поступает на ваш WebDAV (или защищенный паролем каталог) и не удается, он перейдет к этому файлу и попадет в состояние существующего состояния WordPress по умолчанию (<код> RewriteCond %{REQUEST_FILENAME} !-f

).
 

The code you are adding, and all answers that are providing Rewrite rules/conditions are useless! The default WordPress code already does everything that you should need it to:

RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] 

Those lines say "if it's NOT an existing file (-f) or directory (-d), pass it along to WordPress. Adding additional rules, not matter how specific or good they are, is redundant--you should already be covered by the WordPress rules!

So why aren't they working???

The .htaccess in the vip directory is throwing an error. The exact same thing happens if you password protect a directory.

Here is the solution:

ErrorDocument 401 /err.txt ErrorDocument 403 /err.txt 

Insert those lines before the WordPress code, and then create /err.txt. This way, when it comes upon your WebDAV (or password protected directory) and fails, it will go to that file, and get caught by the existing default WordPress condition (RewriteCond %{REQUEST_FILENAME} !-f).

</div
 
 
     
     
9
 
vote

Таким образом, окончательное решение:

 <код> ErrorDocument 401 /misc/myerror.html ErrorDocument 403 /misc/myerror.html  # BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule>  # END WordPress   

Я разместил больше о причине этой проблемы в моей конкретной ситуации, с участием WordPress и WebDav на Dreamhost, которые я ожидаю, что многие другие будут иметь на Мой сайт .

 

In summary, the final solution is:

ErrorDocument 401 /misc/myerror.html ErrorDocument 403 /misc/myerror.html  # BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule>  # END WordPress 

I posted more about the cause of this problem in my specific situation, involving Wordpress and WebDAV on Dreamhost, which I expect many others to be having on my site.

</div
 
 
8
 
vote

Вы упоминали, что у вас уже есть файл .htaccess в каталоге, который вы хотите игнорировать - вы можете использовать

 <код> RewriteEngine off   

в этом .htaccess, чтобы остановить использование mod_rewrite (не уверена, если вы используете mod_rewrite в этой папке, если вы, то это не помогут, так как вы не можете выключить его).

 

You mentioned you already have a .htaccess file in the directory you want to ignore - you can use

RewriteEngine off 

In that .htaccess to stop use of mod_rewrite (not sure if you're using mod_rewrite in that folder, if you are then that won't help since you can't turn it off).

</div
 
 
   
   
7
 
vote

Попробуйте заменить эту часть вашего кода:

 Rewriterule ^ VIP /.$ - [PT] 

... Со следующим:

 Rewritecond% {request_uri}! (vip) [nc] 

Это должно исправить вещи.

 

Try replacing this part of your code:

RewriteRule ^vip/.$ - [PT]

...with the following:

RewriteCond %{REQUEST_URI} !(vip) [NC]

That should fix things up.

</div
 
 
 
 
4
 
vote
 <код> RewriteCond %{REQUEST_URI} !^pilot/    

- это способ сделать это.

 
RewriteCond %{REQUEST_URI} !^pilot/  

is the way to do that.

</div
 
 
3
 
vote

У меня была такая же проблема, используя WordPress, и обнаружила, что проблема связана с не имеющим правильного обработчика для ошибок 401 и 403 ..

 <код> -f0  

Эти условия уже должны не переписать URL-адрес существующих папок, но они не выполняют свою работу для папок защищенных паролем. В моем случае добавляя следующие две строки к моему корню .htaccess Исправлена ​​проблема:

 <код> -f1  

Конечно, вам нужно создать /misc/myerror.html,

 

I’ve had the same issue using wordpress and found that the issue is linked with not having proper handler for 401 and 403 errors..

RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d 

These conditions are already supposed not to rewrite the url of existing folders but they don’t do their job for password protected folders. In my case, adding the following two lines to my root .htaccess fixed the problem:

ErrorDocument 401 /misc/myerror.html ErrorDocument 403 /misc/myerror.html 

Of course you need to create the /misc/myerror.html,

</div
 
 
3
 
vote

Это работает ...

 <код> -f2  

Но убедитесь, что это первое правило после

Переписать на

I.e.

 <код> -f3  
 

This works ...

RewriteRule ^vip - [L,NC] 

But ensure it is the first rule after

RewriteEngine on

i.e.

ErrorDocument 404 /page-not-found.html  RewriteEngine on  RewriteRule ^vip - [L,NC]  AddType application/x-httpd-php .html .htm  RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d   etc 
</div
 
 
3
 
vote

В моем случае ответ brentstronstrine (и я вижу matdumsa также имел ту же идею) был правильным ... я хотел договориться Ответы, но быть новым здесь, у меня нет «репутации», поэтому я должен написать полный ответ, чтобы подчеркнуть, что я думаю, является настоящим ключом здесь.

Несколько из этих ответов успешно остановит использование WordPress Index.php ... но во многих случаях причина выполнения этого заключается в том, что в нем есть реальный каталог с реальными страницами, которые вы хотите отобразить напрямую, и

 <код> RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d   

Линии уже позаботятся об этом, поэтому большинство этих решений - это отвлечение в том случае, как мой.

Ключ был BRENTORTRINE'S Insight, что ошибка была вторичным эффектом, вызванным защитой паролем внутри каталога, которую я пытался отобразить напрямую. Помещая в

 <код> ErrorDocument 401 /err.txt ErrorDocument 403 /err.txt   

Линии и создание страниц ошибок (я фактически создал Err401.html и Err403.html и сделал больше информативных сообщений об ошибках), я остановил 404 ответа, когда он не сможет найти какую-либо страницу для отображения для выполнения 401 аутентификации, а затем Папка работала, как ожидалось, ... показываю диалоговое окно входа в систему Apache, затем содержимое папки или сбой, моя ошибка 401.

 

In my case, the answer by brentonstrine (and I see matdumsa also had the same idea) was the right one... I wanted to up-vote their answers, but being new here, I have no "reputation", so I have to write a full answer, in order to emphasize what I think is the real key here.

Several of these answers would successfully stop the WordPress index.php from being used ... but in many cases, the reason for doing this is that there is a real directory with real pages in it that you want to display directly, and the

RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d 

lines already take care of that, so most of those solutions are a distraction in a case like mine.

The key was brentonstrine's insight that the error was a secondary effect, caused by the password-protection inside the directory I was trying to display directly. By putting in the

ErrorDocument 401 /err.txt ErrorDocument 403 /err.txt 

lines and creating error pages (I actually created err401.html and err403.html and made more informative error messages) I stopped the 404 response being generated when it couldn't find any page to display for 401 Authentication Required, and then the folder worked as expected... showing an apache login dialog, then the contents of the folder, or on failure, my error 401 page.

</div
 
 
 
 
-1
 
vote

Я не уверен, понимаю ли я вашу цель, но следующее может сделать то, что вы после?

 <код> RewriteRule ^/vip/(.*)$   /$1?%{QUERY_STRING} [L]   

Это вызвало такое URL, как http://www.example.com/vip/ fred.html переписать без / vip.

 

I'm not sure if I understand your objective, but the following might do what you're after?

RewriteRule ^/vip/(.*)$   /$1?%{QUERY_STRING} [L] 

This will cause a URL such as http://www.example.com/vip/fred.html to be rewritten without the /vip.

</div
 
 

Связанный проблема

2  Сделать HTACCESS не применять для некоторых подпапок  ( Make htaccess to not be applied for some subfolders ) 
Я использую эту htaccess для моего приложения. <код> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQ...

11  Бродяжественная доля, создавая 400 плохой запрос  ( Vagrant share producing a 400 bad request ) 
Я использую брызги с apache2 и специально командой <Код> vagrant share --https 443 Все начинается нормально и предоставляет URL. Когда я получаю доступ к...

2  Запустите PHP-скрипт в фоновом режиме на Debian (Apache)  ( Run a php script in background on debian apache ) 
Я пытаюсь сделать Push-уведомление работать на моем VPS Debian (Apace2, MySQL). Я использую сценарий PHP из этого учебника (http://www.raywenderlich.com/352...

0  Mac Yosmite: Установите MacPorts Apache в качестве по умолчанию (Opt / local / apache2) на localhost, а не распределение OSX  ( Mac yosmite set macports apache as default opt local apache2 on localhost rat ) 
Я установил Apache через MACPPORTS, он работал нормально, но вдруг по какой-то причине он переключился на использование распределения OSX по умолчанию Apache,...

2  Информация о установке Apache agchancibiz с контейнером Birt  ( Apache ofbiz installation trouble with birt container ) 
Я новичок в Apache office. Я загрузил и устанавливаю по инструкции по инструкции. Я успешно загрузил данные. Но когда am Runding of of of of and of gradlew...

2  Как сделать переводчик Mod_Perl Sticky по некоторым конвенциям?  ( How to make a mod perl interpreter sticky by some conventions ) 
Как кажется, что mod_perl только удается Perl Переводчики на VHOST Есть любой способ, которым я могу влиять, какой клонированный переводчик MOD_PERL Выбирае...

0  Как я могу надежно разрешить веб-пользователям создавать файлы?  ( How can i securely allow web users to create files ) 
Я строю веб-сайт, который позволяет определенным пользователям писать отзывы, и я хочу автоматически генерироваться небольшой PHP-файл, когда они делают. Како...

-1  Http к https не работает правильно  ( Http to https is not working correct ) 
Я пытаюсь перенаправить моих посетителей HTTPS с кодом ниже в .htaccess. <код> RewriteCond %{SERVER_PORT} 80 RewriteRule ^(.*)$ https://example.com/$1 [R,L]...

0  Apache deflate на CSS и JS в подкаталоге - без сжатия  ( Apache deflate on css and js in subdirectory no compression ) 
Веб-сайт: http://taylorsbackyardcenter.ca/store Так что я заканчиваю oscommerce сайт и я реализую сжатие, кэширование и оптимизацию на месте. Я столкнул...

3  Docker не может выполнить вход в систему против SSO / Федерации с помощью модулей Apache & Shibboleth  ( Docker unable to perform login against sso federation services via apache sh ) 
У меня есть частный реестр Docker, сидя за безопасным экземпляром Apache / Ubuntu в облаке Amazon. Apache обрабатывает корпоративную аутентификацию через моду...

9  AP_PASS_BRIGADE не удалось в Handle_request_ipc Функция  ( Ap pass brigade failed in handle request ipc function ) 
Страница вступает в результате ошибки 500, а журнал показывает это: <код> [Wed Mar 20 11:19:23 2013] [warn] [client 127.0.0.1] (104)Connection reset by peer...

0  Модуль Xampp Apache не работает - жду ошибки localhost '  ( Xampp apache module not working waiting for localhost error ) 
Я столкнулся с проблемой при попытке предварительного просмотра PHP-файлов с помощью модуля панели управления PHAMPP. По сути, я открываю панель управления, н...

5  Apache Sockets не закрываются?  ( Apache sockets not closing ) 
У меня есть веб-приложение, написанное с помощью Cherrypy, который работает на месте 127.0.0.1:4321 . Мы используем Mod-Rewrite и Mod-Proxy, чтобы Apache Act...

18  Почему PUTENV () необходимо на уже определенной переменной среды?  ( Why is putenv needed on an already defined environment variable ) 
Когда <код> php используется как <код> apache модуль, переменная среды, исходящая из Apache SetEnv Directive доступна для PHP <код> getenv() , но он не мо...

0  Python / django - Начало Apache с mod_wsgi  ( Python django starting apache with mod wsgi ) 
пытается запустить mod_wsgi. Получение опорной ошибки связанной с FMOD. <код> [root@host]# mod_wsgi-express start-server wsgi.py --port=80 > --user www...

Связанный проблема

2  Сделать HTACCESS не применять для некоторых подпапок 
11  Бродяжественная доля, создавая 400 плохой запрос 
2  Запустите PHP-скрипт в фоновом режиме на Debian (Apache) 
0  Mac Yosmite: Установите MacPorts Apache в качестве по умолчанию (Opt / local / apache2) на localhost, а не распределение OSX 
2  Информация о установке Apache agchancibiz с контейнером Birt 
2  Как сделать переводчик Mod_Perl Sticky по некоторым конвенциям? 
0  Как я могу надежно разрешить веб-пользователям создавать файлы? 
-1  Http к https не работает правильно 
0  Apache deflate на CSS и JS в подкаталоге - без сжатия 
3  Docker не может выполнить вход в систему против SSO / Федерации с помощью модулей Apache & Shibboleth 
9  AP_PASS_BRIGADE не удалось в Handle_request_ipc Функция 
0  Модуль Xampp Apache не работает - жду ошибки localhost ' 
5  Apache Sockets не закрываются? 
18  Почему PUTENV () необходимо на уже определенной переменной среды? 
0  Python / django - Начало Apache с mod_wsgi 



© 2021 www.qaru.top All Rights Reserved. Q&A House все права защищены


Licensed under cc by-sa 3.0 with attribution required.