.htaccess не работает (mod_rewrite)

Похоже, что -jar подбирается как аргумент Start-Process, а не передается в java.

Хотя в документации указано, что -ArgumentList - Необязательно, Я подозреваю, что не учитывает вещи типа -option.

Вероятно, вам нужно использовать:

Start-Process -FilePath java -ArgumentList ...

Например, в Powershell ISE , следующая строка вызывает помощь Java (хотя и быстро исчезает):

Start-Process -FilePath java -argumentlist -help

, но эта строка :

Start-Process -FilePath java -help

вызывает Powershell ] себя , чтобы жаловаться на -help.

29
задан raven 5 December 2009 в 17:27
поделиться

9 ответов

Как сказал Винко,

RewriteLog "/tmp/rewrite.log"
RewriteLogLevel 9

и посмотрите на этот файл.

В противном случае, вот код, который мы используем для перенаправления с zirconium.zrs.hr/~zatemas на zatemas.zrs .hr:

RewriteEngine on

# For sites running on a port other than 80
RewriteCond %{HTTP_HOST}   !^zatemas\.zrs\.hr [NC]
RewriteCond %{HTTP_HOST}   !^$
RewriteCond %{SERVER_PORT} !^80$
RewriteRule ^/~zatemas/(.*)         http://zatemas.zrs.hr:%{SERVER_PORT}/$1 [L,R]

# And for a site running on port 80
RewriteCond %{HTTP_HOST}   !^192\.168\.1\.24 [NC]
RewriteCond %{HTTP_HOST}   !^zatemas\.zrs\.hr [NC]
RewriteCond %{HTTP_HOST}   !^$
RewriteRule ^/~zatemas/(.*)         http://zatemas.zrs.hr/$1 [L,R]

Я видел в сети, что люди обнаруживают HTTPS в основном по тому, является ли порт 443. документация mod_rewrite говорит, что для переменной HTTPS должно быть установлено значение on или off, соответственно - I Предположим, вы выполняете RewriteCond% {HTTPS} ^ на $ , чтобы проверить, включен ли он.

Также обратите внимание: директивы .htaccess для перезаписи URL не работают должным образом, если вы доступ к файлам в домашнем каталоге пользователя - например, example.com/~username/. Однако по вашему сценарию это не должно вас беспокоить. Мой код выше помещен в конфигурацию основного сервера, в раздел VirtualHost (точнее,

16
ответ дан 28 November 2019 в 00:55
поделиться

Попробуйте этот небольшой трюк:

RewriteEngine on
RewriteCond %{HTTPS}s/%{HTTP_HOST} ^(on(s)|[^/]+)/www\.(.+) [NC]
RewriteRule ^ http%2://%3%{REQUEST_URI} [L,R=301]
0
ответ дан 28 November 2019 в 00:55
поделиться

Или это:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
RewriteCond %{HTTP_PORT} =443
RewriteRule (.*) https://%1/$1 [L,R=301]
RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
RewriteRule (.*) http://%1/$1 [L,R=301]
0
ответ дан 28 November 2019 в 00:55
поделиться

Как насчет этого правила перезаписи?

RewriteEngine On 
RewriteCond %{HTTP_HOST} ^www.example.com$ [NC]
RewriteRule ^(.*)$ http://example.com/$1 [R=301,L]
1
ответ дан 28 November 2019 в 00:55
поделиться

Похоже, вы говорите, что ваш mod_rewrite вообще не работает. Вот несколько вещей, которые можно попробовать:

Вы сказали, что он был включен, но предоставленная информация:

root@s15348441:/etc/apache2/mods-available# more rewrite.load
LoadModule rewrite_module /usr/lib/apache2/modules/mod_rewrite.so

Просто показывает его в папке «mods-available», что означает, что он установлен, но не обязательно включен. Если он включен, он должен иметь символическую ссылку в папке "mods-enabled" (вам потребуется a2enmod , если его там нет)

Если он включен и был перезапущен следующим шагом будет включение функции ведения журнала перезаписи мода; это отличный инструмент для отладки.

Отредактировано для добавления: Вы можете перенести перезапись мода в базовую конфигурацию. Если у вас есть к нему доступ, рекомендуется в любом случае поместить вашу конфигурацию в базовый раздел (см. здесь ). Это' s также легче определить, имеет ли это какое-либо отношение к mod_rewrite (например, ваши allowoverrides запутываются) или это чисто проблема htaccess.

Продолжение : (@Vinko Vrsalovic прав в том, что это жесткий отладочный носитель). Если вы переместили его в свою базовую конфигурацию, и он все еще не работал, значит, мы находимся в чем-то, вы устранили .htaccess часть. Вы должны опубликовать новую конфигурацию вместе с журналами перезаписи. Если вы не получили журнал перезаписи, то 1) ваша конфигурация не была загружена (необходимо перезапустить apache) или 2) вы не попали в раздел конфигурации, который, как вы думаете, вы

(@Vinko Vrsalovic прав насчет того, что это жесткий отладочный носитель). Если вы переместили его в свою базовую конфигурацию, но он все еще не работал, значит, мы находимся в чем-то, вы удалили часть .htaccess. Вы должны опубликовать новую конфигурацию вместе с журналами перезаписи. Если вы не получили журнал перезаписи, то 1) ваша конфигурация не была загружена (необходимо перезапустить apache) или 2) вы не попали в раздел конфигурации, который, как вы думаете, вы

(@Vinko Vrsalovic прав насчет того, что это жесткий отладочный носитель). Если вы переместили его в свою базовую конфигурацию, но он все еще не работал, значит, мы находимся в чем-то, вы удалили часть .htaccess. Вы должны опубликовать новую конфигурацию вместе с журналами перезаписи. Если вы не получили журнал перезаписи, то 1) ваша конфигурация не была загружена (необходимо перезапустить apache) или 2) вы не попали в раздел конфигурации, который, как вы думаете, вы

4
ответ дан 28 November 2019 в 00:55
поделиться
RewriteEngine on
RewriteCond %{HTTPS} =on
RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
RewriteRule ^(.*)$ https://%1$1 [L,R=301]
RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
RewriteRule ^(.*)$ http://%1$1 [L,R=301]

Два небольших отличия от других ответов:

Обратная ссылка % 1 в RewriteRule берется из последнего сопоставленного RewriteCond ], поэтому проверка HTTPS должна быть перед проверкой www в имени хоста.

% 1 $ 1 не требует косой черты посередине, потому что вы получите это из совпадения пути в RewriteRule .

И последний совет: поскольку вы контролируете разделы VirtualHost в основной конфигурации Apache, было бы быстрее разместить эти там правила. Кроме того, их можно разделить, поместив простой HTTP-код в *: 80 и HTTPS в *: 443, что означает, что вы можете полностью удалить RewriteCond% {HTTPS} = on , поскольку он будет применяться только к запросы, предназначенные для этого виртуального хоста.

6
ответ дан 28 November 2019 в 00:55
поделиться

Microsoft придумала DBNull в .NET 1.0 для представления NULL базы данных. Однако это неудобно, потому что вы не можете создать строго типизированную переменную для хранения подлинного значения или null. Microsoft решила эту проблему в .NET 2.0 с помощью типов, допускающих значение NULL. Однако у вас все еще есть большие куски API, которые используют DBNull, и их нельзя изменить.

Просто предложение, но обычно я делаю следующее:

  1. Все переменные, содержащие данные, считываемые или записываемые в база данных должна иметь возможность обрабатывать нулевые значения. Для типов значений это означает, что они должны быть Nullable (Of T). Для ссылочных типов (String и Byte ()) это означает, что значение может быть Nothing.
  2. Напишите набор функций для преобразования между «объектом, который может содержать DBNull» и «переменной .NET, допускающей значение NULL». Это фигня RewriteEngine на RewriteCond% {HTTP_HOST} ^ www \. (. *) [NC] RewriteRule (. *) //% 1 / $ 1 [L, R = 301]

    Если вы получаете ошибку 500 (внутренняя ошибка сервера), значит, он ПРОЧИТЫВАЕТСЯ.

    Если это так, вы должны включить RewriteLog в конфигурации основного сервера (не в .htaccess) следующим образом:

     RewriteLog "/tmp/rewrite.log"
    RewriteLogLevel 9
    
  3. А затем проверьте файл /tmp/rewrite.log, чтобы узнать, что происходит. Сообщите о результатах.

    (Stack Overflow не подходит для отладки, для этого лучше подходит IRC, попробуйте # apache@irc.freenode.net )

    Удачи.

21
ответ дан 28 November 2019 в 00:55
поделиться

Каковы разрешения для вашего файла .htaccess?

I Не уверен, но думаю, это 644.

0
ответ дан 28 November 2019 в 00:55
поделиться

Прежде всего, убедитесь, что mod_rewrite действительно загружается. Вы можете сделать это с помощью apache2ctl:

[root@host ~]# apache2ctl -t -D DUMP_MODULES 2>&1 |grep rewrite
rewrite_module (shared)

Если это не так, вам, возможно, придется запустить 'a2enmod rewrite'

Затем проверьте, читается ли ваш файл .htaccess. Обычно я делаю это, помещая мусор в файл .htaccess, затем загружая страницу в этот каталог в моем браузере и проверяя, что я получаю ошибку 500

В качестве примечания, как уже упоминалось другими, если у вас есть возможность чтобы напрямую изменить конфигурацию Apache, вы должны поместить правила перезаписи туда, а не в файл .htaccess, поскольку это менее эффективно. Apache сначала должен решить, в каком каталоге искать файл .htaccess, затем прочитать его, а затем выполнить перезапись. Если RewriteRules указаны внутри ваших директив VirtualHost, тогда он сможет выполнить их до того, как найдет файл .htaccess. Указание их внутри вашего VirtualHost также означает, что не имеет значения, читается ли ваш файл .htaccess. Это будет выглядеть примерно так:

 <VirtualHost *:80>
    .... existing config ....
    RewriteEngine on
    RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
    RewriteRule (.*) http://%1/$1 [L,R=301]
 </VirtualHost>
 <VirtualHost *:443>
    .... existing config ....
    RewriteEngine on
    RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
    RewriteRule (.*) https://%1/$1 [L,R=301]
 </VirtualHost>
3
ответ дан 28 November 2019 в 00:55
поделиться
Другие вопросы по тегам:

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