nginx php-дружественное перенаправление URL без вмешательства в index.php, вызывающее / index

1

Я пробовал так много разных конфигураций, чтобы обеспечить постоянное перенаправление любого запроса, заканчивающегося на.php, для перенаправления на себя без.php.

Проблема в том, что я не могу получить правило для перенаправления запросов, сделанных в любой каталог с /index.php, для перенаправления на/вместо /index.

Пример:

Желаемое поведение =/blog/index.php ->/blog/Текущее поведение =/blog/index.php ->/blog/index

Есть ли чистое решение, чтобы любой запрос, содержащий "index.php", удалял себя из запроса, чтобы просто /, все, все еще удаляя.php из всех других запросов, не включая index.php?

Две проблемные линии, с которыми я не могу работать:

if ($request_uri ~* "^(.*/)index\.php$") { return 301 $1; }
if ($request_uri ~ ^/(.*)\.php$) { return 301 /$1; }

Config:

# Upstream
upstream backend {
server unix:/var/run/php5-fpm.sock;
}

server {
listen 443 ssl;
server_name mysite.net;

# Serving
root /var/www/html/mysite;
charset utf-8;
index index.php;

# Resources
location / {
try_files $uri $uri/ @extensionless-php;
}

location @extensionless-php {
rewrite ^(.*)$ $1.php last;
}

location ~* /includes/(.+)\.php$ {
deny all;
}

location ~ \.php {
try_files $uri =404;
fastcgi_pass backend;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}

# Status
location /nginx_status {
stub_status on;
access_log off;
allow 127.0.0.1;
deny all;
}

}
  • 0
    Я бы рекомендовал опубликовать то, что вы в настоящее время пытались сделать
Теги:
nginx
redirect

1 ответ

0
Лучший ответ

Вероятно, вы столкнулись с проблемой, когда в вашем браузере была перенаправлена перенаправленная переадресация 301 Moved Permanently в своем кеше, поэтому некоторые из ваших новых кодов не будут иметь никакого эффекта.

Очистите кеш и попробуйте что-то вроде этого:

index index.php;
if ($request_uri ~ ^/([^?]*?)(?:(?<=/)index(?:\.php)?|\.php)(\?.*)?$) { return 301 /$1$2;   }

Вышеупомянутая строка поддерживает удаление не только index.php, но также и index как у вас может быть из вашего более раннего вопроса, а также только .php, но она также сохраняет возможную строку запроса из $args.

Чтобы избежать поддержки удаления только index, все еще поддерживая остальные функции, как указано выше, используйте вместо этого следующее:

if ($request_uri ~ ^/([^?]*?)(?:(?<=/)index)?\.php(\?.*)?$) {   return 301 /$1$2;   }

PS Исходное объяснение этого трюка здесь: nginx redirect loop, удалите index.php из url.

  • 0
    Вау, это прекрасно. Спасибо. Я думаю, я просто не узнал решение, которое вы связали, потому что я действительно видел его, когда искал вокруг, прежде чем спрашивать.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню