2010-07-15 1 views
9

Я установил nginx, FastCGI и PHP на свой сервер. WordPress 3.0 установлен после битва битвы, но он установлен и работает хорошо.WordPress 3.0 & nginx - permalink, 404 problem

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

Я понимаю, что это связано с тем, что nginx не поддерживает .htaccess и WordPress, запутываясь с тем, куда следует переходить, когда страница перенаправлена.

Я пробовал несколько перезаписи в файлах конфига nginx и даже плагин совместимости nginx; ни работали. С одним переписанием мне удалось остановить ошибки 404, но вместо того, чтобы WordPress нашел сообщение, которое я получил после того, как я просто получил страницу подтверждения PHP. Ба.

Форумы усеяны людьми с подобными проблемами. у кого-нибудь есть решение?

+0

Возможный дубликат [Преобразование Wordpress 3.0 .htaccess в правила перезаписи nginx] (http://stackoverflow.com/questions/2865690/wordpress-3-0-conversion-of-htaccess-to-nginx-rewrite-rules) – Jeff

+0

Все, что связано с этим сообщением, не работает. –

ответ

2

Вы пробовали nginx Compatibility plugin?

Plus ElasticDog, по-видимому, обеспечивает довольно concise article on getting WP working with nginx - который включает в себя получение довольно постоянных ссылок для работы.

Вот еще одна статья, которая, похоже, касается конкретно nginx rewrite rules for WordPress.

+1

Да, усталый плагин - не работает. Я также следил за учебником ElasticDog, сейчас я использую большую часть его конфигурации. Я также следил за http://wiki.dreamhost.com/Nginx и понимал большую часть этого (я думаю!), Но опять же, та же проблема. Всякий раз, когда я изменяю постоянную ссылку на все, кроме значения по умолчанию, и пытаюсь получить доступ к сообщению, статье или странице, я получаю «No input file указанный». ошибка. Я предполагаю, что WordPress (и переписывает) не могут сказать WordPress, что делать, но я никуда не гожу ... :( –

+0

Плагин действительно работает, просто нужно еще что-то сделать: http: //piran.com.au/2011/10/nginx-and-wordpress-permalinks/ – Rich

+0

@ Теперь ваша ссылка составляет 404, поэтому полезно извлечь важную информацию в редактирование ответа или собственный ответ –

5

После сильной боли:

# if filename doesn't exist, take the request and pass to wordpress as a paramater 
     if (!-e $request_filename) { 
       rewrite ^/wordpress/(.+)$ /wordpress/index.php?q=$1 last; 
     } 

Если запрашиваемый файл не существует, передать его в index.php. Это немного медленно, и я думаю, что я мог бы попробовать и не использовать запрос, но он работает ... :)

+0

Рад слышать, что вы сделали прорыв! Извините @ Тэффи, у меня нет опыта работы с nginx, но я всегда буду делать все возможное, чтобы помочь;) – TheDeadMedic

+0

@Taffy. Это также решило мою проблему, спасибо большое – huntar

+0

Вам не нужно использовать поиск перезаписи; [см. ответ здесь] (http: // stackoverflow.com/questions/8876462/nginx-rewrite-rule-under-a-subdirectory) –

16

На вашем месте/блок,

добавить это и удалить любые неспецифические правила перезаписи:

try_files $uri $uri/ /index.php; 
+0

Это работало без проблем, и это рекомендуемое решение согласно официальной вики nginx. –

+0

Вот ключ: это должен быть ваш каталог **/**. Если вы поместите его в свой каталог/в блог или где-нибудь еще, вы получите еще 404 ошибки. – wiredniko

+0

wiredniko - Поместите перед index.php расположение вашего каталога. В вашем случае /index.php обратится к /blog/index.php. – user2298995

2

Так я решил свои постоянные ссылки в своих блогах wordpress в dreamhost.

Внутри папки /home/ftpusername/nginx/example.com/ (если у вас его нет, создайте его)
создал файл nginx.conf следующего содержания

location/{ 
    index index.php index.html index.htm; 
    try_files $uri $uri/ /index.php?$args; 
} 

перезагрузил Nginx
/и т.д. /init.d/nginx reload

Некоторые примечания:
ftpusername и example.com ДОЛЖНЫ быть изменены в соответствии с вашей системой.

Вот и все!
Удачи вам.

0

это не работает, если вы используете место, отличное/как:

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

http://www.pearlin.info

location ~ \.php$ 



    { 
     try_files $uri $uri/ /index.php?$uri&$args; 
     fastcgi_split_path_info ^(.+\.php)(/.+)$; 
     fastcgi_pass 127.0.0.1:9000; 
     fastcgi_index index.php; 
     fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
     include fastcgi_params; 
    } 

    if (!-e $request_filename){ 
    rewrite ^(.*)$ /index.php?url=$1 break; 
    } 
0

я сделал следующее ..

в папке /home/userrunningnginx/nginx/domain.com

У меня есть:

default.conf (файл)

include /home/neukbaarofnietps/nginx/neukbaarofniet.com/drop; 

падение (файл)

# Rather than just denying .ht* in the config, why not deny 
# access to all .invisible files 
location ~ /\. { deny all; access_log off; log_not_found off; } 

nginx.conf (файл)

location/{ 
index index.php index.html index.htm; 
try_files $uri $uri/ /index.php?$args; 

}

WORDPRESS-nginx.conf (файл)

####################### 
# WP Super Cache 

# if the requested file exists, return it immediately 
if (-f $request_filename) { 
    break; 
} 

set $supercache_file ''; 
set $supercache_uri $request_uri; 

if ($request_method = POST) { 
    set $supercache_uri ''; 
} 

# Using pretty permalinks, so bypass the cache for any query string 
if ($query_string) { 
set $supercache_uri ''; 
} 

if ($http_cookie ~* "comment_author_|wordpress|wp-postpass_") { 
set $supercache_uri ''; 
} 

# if we haven't bypassed the cache, specify our supercache file 
if ($supercache_uri ~ ^(.+)$) { 
set $supercache_file /wp-content/cache/supercache/$http_host$1/index.html; 
} 

# only rewrite to the supercache file if it actually exists 
if (-f $document_root$supercache_file) { 
rewrite ^(.*)$ $supercache_file break; 
} 

# all other requests go to Wordpress 
if (!-e $request_filename) { 
rewrite ^.*$ /index.php last; 
} 
6

Если WordPress является в другом каталоге, кроме корня, вместо

if (!-e $request_filename) { 
    rewrite ^/wordpress/(.+)$ /wordpress/index.php?q=$1 last; 
} 

Вы можете:

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

Эта страница имеет точно такую ​​же концепцию. Я должен был прочитать и попробовал первым: nginx rewrite rule under a subdirectory

+1

это решило мою проблему! – Mitro

0

Добавление этого блока к вашему nginx.conf должны решить вопрос:

 if (!-e $request_filename) { 
      rewrite ^/wordpress_dir/(.+)$ /wordpress_dir/index.php?q=$1 last; 
    } 

Надеется, что это помогает.

Удачи.

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

  • Нет связанных вопросов^_^