it-swarm.com.ru

.htaccess & Wordpress: исключить папку из RewriteRule

У меня есть этот файл .htaccess в Wordpress. Он расположен в/public_html/(веб-корень). Мне нужно исключить папку (csNewsAd) из механизма перезаписи. Я попробовал это, основываясь на другом вопросе, подобном здесь, в SO, но не работал вообще.

AddHandler x-httpd-php5 .php
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^/csNewsAd($|/) - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

Какие-либо предложения?

Больше данных

В/csNewsAd есть еще один .htaccess для защиты паролем:


AuthName "Clasificados"
AuthType "basic"
AuthUserFile /home/ig000192/public_html/csNewsAd/.passwd
Require valid-user

17
Joel A. Villarreal Bertoldi
RewriteCond %{REQUEST_URI} !^/(csNewsAd|csNewsAd/.*)$ 

вместо 

RewriteRule ^/csNewsAd($|/) - [L] 
42
GmonC

Поместите строку ниже в файл .htaccess в корне.

ErrorDocument 401 default

Была та же самая проблема, и это работало для меня . Это не проблема, что перенаправления не работают. Проблема в том, что ошибка 401 (требуется авторизация) не определена, поэтому всплывающее окно не отображается.

18
Jory Hogeveen

Возникла та же проблема, и я нашел ответ на мою проблему здесь: http://kb.siteground.com/article/How_to_exclude_a_folder_from_Wordpress_permalinks.html

--С сайта

Чтобы исключить подпапки из правил переписывания WordPress, необходимо отредактировать файл .htaccess и изменить жирную строку ниже:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# RewriteRule . /index.php [L] # Original line
RewriteRule ./ /index.php [L] # New line
</IfModule>
# END WordPress
5
user1389907

.htaccess влияет на все каталоги внизу, поэтому, если вы поместите .htaccess в csNewsAd с нужными вам директивами перезаписи, он будет иметь приоритет над корневым файлом.

3
markratledge

Если вы используете mod_rewrite в файле .htaccess, вам просто нужно указать путь URL без префикса локального пути в ваших шаблонах. В вашем случае без начального / (как вы находитесь в корне документа /):

RewriteRule ^csNewsAd($|/) - [L]
2
Gumbo

Вот мое решение в отношении сайта GoDaddy WordPress. В моей установке был файл web.config, поэтому я добавил правило перезаписи. Мне нужен путь/ApiData, где я мог бы запустить приложение MVC.net (виртуальный каталог) для вызовов AJAX. 

<system.webServer>
    <!-- ... -->
    <rewrite>
        <rules>
            <rule name="apidata" stopProcessing="true">
                <match url="apidata"/>
            </rule>
            <rule name="wordpress" patternSyntax="Wildcard">
                <match url="*"/>
                <conditions>
                    <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true"/>
                    <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true"/>
                </conditions>
                <action type="Rewrite" url="index.php"/>
            </rule>

        </rules>
    </rewrite>
</system.webServer>
1
Pete

У меня есть хостинг GoDaddy, и этот вопрос убил меня. У меня возникали одни и те же проблемы снова и снова с конфликтующими опциями .htaccess в public_html, с моим защищенным паролем подкаталогом.

Я закончил тем, что купил другую учетную запись, потому что я попробовал приблизительно миллион различных модификаций в моем файле .htaccess, и ничто не обошло эту проблему. Сейчас я делюсь своими настройками и решением, просто для полноты и ясности. (Точно так же, как вы знаете, аккаунт стоил того, так что ничего страшного.)

Если это выглядит как комбинация ответов других, это потому, что это так. Это заняло все это, чтобы работать.

Структура каталогов:

-otherfiles
---public_html
---.htaccess
-----subfolder
---.htaccess

Подпапка .htaccess имеет функцию защиты паролем, так что похоже на это:

AuthType Basic
AuthName "Attendance"
AuthUserFile "/home/user/.htpasswds/public_html/attendance/passwd"
require valid-user

У public_html .htaccess изначально было это, и оно не работало (в том смысле, что оно поглощало ВСЕ и перенаправляло его, так что FatFreeFramework или CodeIgniter обрабатывали его):

RewriteEngine On
RewriteCond $1 !^(index.php|resources|subfolder|robots.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.*)$ index.php?/$1 [L,QSA]

Чтобы решить эту проблему, я добавил две строки в свой файл public_html .htaccess. И поэтому вы не угадаете, где, я покажу весь файл снова:

RewriteEngine On
RewriteCond $1 !^(index.php|resources|robots.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteCond %{REQUEST_URI} !^/(subfolder|subfolder/.*)$
ErrorDocument 401 default
RewriteRule ^(.*)$ index.php?/$1 [L,QSA]
1
TinkerTenorSoftwareGuy

Я впервые начал делать это с Rails. В верхней части Rails .htaccess находятся следующие две строки.

# RewriteCond %{REQUEST_URI} ^/notrails.*
# RewriteRule .* – [L]

Когда я наконец последовал их примеру, это сработало.

Я хотел исключить изображения, javascripts, таблицы стилей, css, images-global, js-global (и т.д.), Поэтому я изменил приведенное выше.

RewriteCond %{REQUEST_URI} ^(images|javascripts|stylesheets|css|images-globa|js-global|js).*
RewriteRule .* – [L]

И это сработало так, как мне нужно.

Мы не будем говорить о том, что у меня так много разных папок JavaScript, таблиц стилей и изображений….

Но это делает мой файл ошибок менее болезненным. Если кто-то добавляет файл изображения, который не существует, моя отправка не должна его обрабатывать.

1
brad tittle

Это # 1 результат Google и неправильный ответ.

Правильный ответ добавляет это перед директивы Wordpress.

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteCond %{REQUEST_URI} ^/subdirectoryname1/(.*)$ [OR]
    RewriteCond %{REQUEST_URI} ^/subdirectoryname2/(.*)$ [OR]
    RewriteRule ^.*$ - [L]
</IfModule>
0
Jeff Karney

У меня была похожая проблема для двух моих сайтов. Комментарии, которые я прочитал здесь, не сработали для меня, но я наконец получил этот код для работы:

<IfModule mod_rewrite.c>
  RewriteEngine on

  # stuff to let through (ignore)
  RewriteCond %{REQUEST_URI} "/folder1/" 
  RewriteRule (.*) $1 [L]

получено с https://www.drupal.org/node/30334

0
Bible Arena

Вы должны попробовать это

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^/(gadget)/(.*) /gadget/$2 [R]

RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress
0
Preetam Purbia

Я знаю, это старый пост, но он все еще помог мне. У меня была дополнительная проблема нескольких блоков RewriteRules:

##
## White listed folders
##
RewriteCond %{REQUEST_URI} !^/(phplist|phplist/.*)$
RewriteCond %{REQUEST_FILENAME} -f
RewriteCond %{REQUEST_FILENAME} !/.well-known/*
RewriteCond %{REQUEST_FILENAME} !/storage/app/uploads/.*
RewriteCond %{REQUEST_FILENAME} !/storage/app/media/.*
...
RewriteCond %{REQUEST_FILENAME} !/modules/.*/(assets|resources)/.*
RewriteRule !^index.php index.php [L,NC]

##
## Block all PHP files, except index
##
RewriteCond %{REQUEST_URI} !^/(phplist|phplist/.*)$
RewriteCond %{REQUEST_FILENAME} -f
RewriteCond %{REQUEST_FILENAME} \.php$
RewriteRule !^index.php index.php [L,NC]

##
## Standard routes
##
RewriteCond %{REQUEST_URI} !^/(phplist|phplist/.*)$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]

и должен был добавить мой RewriteCond перед каждым блоком ...

0
Johanness

вы можете добавить что-то вроде этого:

RewriteCond %{REQUEST_URI} !^/csNewsAd 

но в этом нет необходимости, потому что если csNewsAd действительно является каталогом (папкой), его не следует переписывать в первую очередь из-за 

RewriteCond %{REQUEST_FILENAME} !-d

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

0
futtta

Стоит отметить, что имеет значение, где в потоке .htaccess эта строка идет.

Смотрите здесь: http://tanyanam.com/technology/wordpress-exclude-directory-from-url-rewrite-with-htaccess - строка должна идти раньше, чем WordPress, она не будет работать после них ,.

Обкрадывать

0
rob_was_taken

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

0
TheLegs