скажем, у меня есть сайт http://domain/
и я помещаю несколько файлов в подкаталог /html_root/app/
и я использую следующее правило перезаписи, чтобы переписать эту папку в свой корень:
location / {
root /html_root;
index index.php index.html index.htm;
# Map http://domain/x to /app/x unless there is a x in the web root.
if (!-f $request_filename){
set $to_root 1$to_root;
}
if (!-d $request_filename){
set $to_root 2$to_root;
}
if ($uri !~ "app/"){
set $to_root 3$to_root;
}
if ($to_root = "321"){
rewrite ^/(.+)$ /app/$1;
}
# Map http://domain/ to /app/.
rewrite ^/$ /app/ last;
}
Я знаю, что это не умный способ, потому что у меня есть другой подкаталог /html_root/blog/
и я хочу, чтобы к нему можно было получить доступ http://domain/blog/
.
Моя проблема в том, что указанное выше правило перезаписи работает нормально, но все еще есть некоторые проблемы: если я получаю доступ
http://domain/a-simple-page/
(Это переписано с http://domain/app/a-simple-page/
)
он работает нормально, но если я получу доступ
http://domain/a-simple-page
(без косой черты), он перенаправляет на исходный адрес:
http://domain/app/a-simple-page/
,
Есть ли способ перенаправить URL без косой черты, следуя моему правилу?
Классический случай следовать неверному руководству, а не чтение вики Я настоятельно рекомендую прочитать о функциях, которые вы (должны) использовать (например, location и try_files), а также мой праймер Nginx поскольку вы полностью упускаете из виду основы Nginx.
Я попытался написать то, что вы хотите, в надлежащем формате, но я не могу обещать, что это сработает, так как я не уверен, что действительно понимаю, что вы пытаетесь сделать, тем не менее, это должно дать вам основу для начала .
server {
listen 80;
server_name foobar;
root /html_root;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ @missing;
}
location /app {
# Do whatever here or leave empty
}
location @missing {
rewrite ^ /app$request_uri?;
}
}