2016-03-29 2 views
1

У меня установлен WordPress на моем корневом сайте example.com/.Правила переписывания Nginx для SEO-структуры URL-адреса - WordPress и другое веб-приложение

Также у меня есть другое веб-приложение, которое на example.com/my-app/, которое имеет уродливые ссылки, такие как example.com/my-app/file.php?arg=value для доступа.

Как я могу сделать мою-приложение SEO дружественной структура URI работает в качестве примера ниже ?:

example.com/my-app/file.php?arg=value 
to 
example.com/my-app/value/ 

В настоящее время, если я доступ к example.com/my-app/value/ он перенаправляет меня к WordPress сообщение, которое содержит некоторые символы значения /. Зачем? Есть ли способ заставить это работать?

Мои Nginx директивы для домена перечислены ниже:

location/{ 
    try_files $uri $uri/ /index.php?$args; 
    fastcgi_read_timeout 300; 
} 

location ~ \.php$ { 
    include /etc/nginx/fastcgi_params; 
    fastcgi_pass unix:/var/run/php5-fpm.sock; 
    fastcgi_index index.php; 
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
} 

Любые идеи? Должен ли я использовать навигацию Ajax с корпусами коммутаторов? Как насчет HTML5 pushState() API? Любые рабочие примеры?

Спасибо за помощь!

ответ

2

Как WordPress, так и my-app работают внутри обычного корня документа, что делает вещи простыми.

Последний элемент директивы try_files является действием по умолчанию для (например) дружественных URL-адресов.

Вам нужен другой обработчик по умолчанию для URI, которые начинаются с /my-app, что достигается с помощью location /my-app блока, например:

location/{ 
    try_files $uri $uri/ /index.php?$args; 
} 
location /my-app { 
    try_files $uri $uri/ /my-app/file.php?arg=$uri&$args; 
} 
location ~ \.php$ { 
    try_files $uri =404; 
    ... 
} 

В приведенном выше случае, arg устанавливается на значение /my-app/value. Если вы действительно должны извлечь последнюю часть URI, добавьте именованное местоположение с переписыванием, например:

location/{ 
    try_files $uri $uri/ /index.php?$args; 
} 
location /my-app { 
    try_files $uri $uri/ @rewrite; 
} 
location @rewrite { 
    rewrite ^/my-app/(.*)$ /my-app/file.php?arg=$1; 
} 
location ~ \.php$ { 
    try_files $uri =404; 
    ... 
} 

Обратите внимание, что fastcgi_read_timeout 300; (в вашем вопросе) должен быть помещен в location ~ \.php$ блоке, или в один из внешних блоков, чтобы быть эффективным.

См. this для получения более подробной информации о директивах nginx, используемых выше.

+0

Отличный человек <4 –

Смежные вопросы