Помогите с файлом Apache .htaccess

Пытаюсь преобразовать файл .htaccess в нотацию NGINX.

Я читал онлайн-справочные руководства, но все еще борюсь.

Кто-нибудь возражал бы помочь. Мой .htaccess:

Options -Indexes
Options +FollowSymLinks  

# Enable ETag
FileETag none                       

# Set expiration header
ExpiresActive on
ExpiresDefault A2592000
Header append Cache-Control "public"

# Compress some text file types
AddOutputFilterByType DEFLATE text/html text/plain text/css text/xml application/x-javascript text/javascript application/javascript application/json

# Deactivate compression for buggy browsers
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html

# Set header information for proxies
Header append Vary User-Agent

########################################################
# Rewrite Rules
########################################################

RewriteEngine on

# Require SSL (HTTPS) on the signup page
RewriteCond %{SERVER_PORT} 80 
RewriteCond %{REQUEST_URI} ^/signup/?
RewriteRule ^(.*)$ https://www.example.com/$1 [R,L]

# Redirect /signup/plan or /signup/plan/ ->  /signup/index.php?account_type=plan
RewriteRule ^signup/([A-Za-z]+)/?$ /signup/index.php?account_type=$1 [NC,L]

# Redirect /home/123 or /home/123/ ->  home.php?home_id=123
RewriteRule ^home/([0-9]+)/?$ home.php?home_id=$1 [NC,L]

# Redirect /homes/ in case someone made a typo when it should have been /home/
RewriteRule ^homes/([0-9]+)/?$ home.php?home_id=$1 [NC,L] 

###########################################################
# Error Handling
###########################################################

#ErrorDocument 400 /
#ErrorDocument 401 /
#ErrorDocument 403 /
#ErrorDocument 404 /
#ErrorDocument 500 /


#################################################
# Default Settings
#################################################

# hide apache server signaute on apache generated pages (e.g. 404)
ServerSignature Off 

ОБНОВЛЕНИЕ:

Для сжатия GZIP это работает. Но я до сих пор не понял, как использовать свои правила перезаписи HTTP.

 gzip             on;
  gzip_min_length  1000;
  gzip_proxied     expired no-cache no-store private auth;
  gzip_types       text/plain application/xml;
  gzip_disable     "MSIE [1-6]\.";

ОБНОВЛЕНИЕ 2

Я попытался заменить свои правила перезаписи htaccess следующими правилами NGINX, но это не работает. Любые идеи, что я делаю неправильно?

# Redirect /signup/planname or /signup/planname/ ->  /signup/index.php?account_type=planname
rewrite  ^signup/([A-Za-z]+)/?$ /signup/index.php?account_type=$1  last;

# Redirect /home/123 or /home/123/ ->  home.php?home_id=123
rewrite  ^home/([0-9]+)/?$ home.php?home_id=$1  last;

# Redirect /homes/ in case someone made a typo when it should have been /home/
rewrite  ^homes/([0-9]+)/?$ home.php?home_id=$1  last;

ОБНОВЛЕНИЕ 3

Согласно комментариям ниже, у меня теперь есть следующая конфигурация NGINX, но у меня все еще есть проблемы

# gzip
gzip             on;
gzip_min_length  1000;
gzip_proxied     expired no-cache no-store private auth;
gzip_types       text/plain application/xml;
gzip_disable     "MSIE [1-6]\.";


# Require SSL (HTTPS) on the signup page
# ====== THIS DOESN'T WORK AND BREAKS NGINX
# I obviously change "example.com" to be my actual domain
if (location /signup/) {
   rewrite ^ https://www.example.com$request_uri? permanent;
}


# Redirect /signup/planname or /signup/planname/ ->  /signup/index.php?account_type=planname
rewrite  ^signup/([A-Za-z] +)/?$ /signup/index.php?account_type=$1  last;

# Redirect /home/123 or /home/123/ ->  home.php?home_id=123
# Also, Redirect /homes/ in case someone made a typo when it should have been /home/
rewrite  ^/homes?/([0-9]+)/?$  /home.php?home_id=$1?  last;

person Terry_k    schedule 29.11.2010    source источник


Ответы (1)


Как я вижу в документации, ваши правила (не условия) должны быть такими :

A:

 RewriteCond %{SERVER_PORT} 80 
 RewriteCond %{REQUEST_URI} ^/signup/?
 RewriteRule ^(.*)$ https://www.example.com/$1

N (подробнее см. здесь):

if (location /signup) {
   rewrite ^ https://pma.clinicacgm.0$request_uri? permanent;
}

A:

RewriteRule ^home/([0-9]+)/?$ home.php?home_id=$1
RewriteRule ^homes/([0-9]+)/?$ home.php?home_id=$1

N:

 rewrite  ^/homes?/([0-9]+)/?$  /home.php?home_id=$1?  last;
person Eir Nym    schedule 30.11.2010
comment
Спасибо Эйр. Вопрос, однако, я хочу, чтобы в последнем правиле разрешались только # (цифры). Похоже, вы установили правило, позволяющее использовать любые символы при использовании (.*), как сделать так, чтобы это были только #? - person Terry_k; 30.11.2010
comment
извините, я только что скопировал с вики.. Должны быть ([0-9]+) или ([0-9]+)? (у меня нет сервера, где их проверить вряд ли) - person Eir Nym; 30.11.2010
comment
Таким образом, любая идея, почему мое ОБНОВЛЕНИЕ 2 не работает, поскольку это именно то, что я сделал - person Terry_k; 30.11.2010
comment
но я не знаю, будет ли трейлинг/или нет. Что делает моя конфигурация Apache, независимо от того, есть ли замыкающий /, переписать на home.php?home_id=$1. Как мне это сделать тогда? - person Terry_k; 30.11.2010
comment
из документации: Если в строке указаны аргументы замены, то к ним добавляются остальные аргументы запроса. Чтобы они не добавлялись, поместите вопросительный знак в качестве последнего символа - person Eir Nym; 30.11.2010
comment
Кроме того, я только что запустил if (location /signup) {rewrite ^ example.com$request_uri. ? постоянный; и он сломался. Так что этот код не работает - person Terry_k; 30.11.2010
comment
Эйр, точно. поместите вопросительный знак в качестве последнего символа - вы сказали мне УДАЛИТЬ ? отметка. Я в замешательстве, что мне делать, т.к. ты говоришь мне две разные вещи - person Terry_k; 30.11.2010
comment
Я говорил об удалении /? в РЕ, а не в замене. непонимание - person Eir Nym; 30.11.2010
comment
Я обновил свой исходный пост с ОБНОВЛЕНИЕМ 3, но все еще получаю ошибки - person Terry_k; 30.11.2010
comment
Похоже переписать ^signup/([A-Za-z] +)/?$ /signup/index.php?account_type=$1 последним; не работает - person Terry_k; 30.11.2010