Intereting Posts
Отключение WordPress 3.6 бездействия logout / login modal window / session expiration Лучше сделать новый wp_query или только модифицировать основной запрос каждый раз? Переписать URL для пользовательского типа сообщения Создать расширенный поиск с таксономиями (не список фильтров) Пользовательский тип сообщения и таксономия постоянные ссылки – Структура Использование / wp-admin работает, используя / login дает 404. Почему? Как включить кнопку редактирования в настройке пользовательского интерфейса темы? Комментарий к спам-блоге WordPress поиск по запросу пользовательского поля Показывать только первого ребенка в выпадающем меню Запрос сообщений нескольких условий Как перечислить последние сообщения в меню wp nav? Автоматизация создания страницы Как показать отдельную страницу в качестве домашней страницы Включение плагина не удалось, потому что у пользователя MySQL нет разрешений CREATE

Изменение постоянных ссылок дает мне 404 ошибок на nginx

РЕДАКТИРОВАТЬ

Оказывается, я лаял неправильное дерево, пытаясь отредактировать .htaccess, поскольку nginx его не использует. Мне, видимо, нужно отредактировать файл .conf. Прежде чем я прочитал это, my_app.conf выглядел так:

upstream backend { server unix:/u/apps/my_app/tmp/php.sock; } server { listen 80 default; root /u/apps/my_app/www; index index.php; access_log /u/apps/my_app/logs/access.log; error_log /u/apps/my_app/logs/error.log; location / { try_files $uri $uri/ /index.php; } # This location block matches anything ending in .php and sends it to # our PHP-FPM socket, defined in the upstream block above. location ~ \.php$ { try_files $uri =404; fastcgi_pass backend; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /u/apps/my_app/www$fastcgi_script_name; include fastcgi_params; } # This location block is used to view PHP-FPM stats location ~ ^/(php_status|php_ping)$ { fastcgi_pass backend; fastcgi_param SCRIPT_FILENAME $fastcgi_script_name; include fastcgi_params; allow 127.0.0.1; deny all; } # This location block is used to view nginx stats location /nginx_status { stub_status on; access_log off; allow 127.0.0.1; deny all; } } 

Теперь он выглядит так, и он все еще не работает:

 upstream backend { server unix:/u/apps/my_app/tmp/php.sock; } server { listen 80 default; root /u/apps/my_app/www; index index.php; access_log /u/apps/my_app/logs/access.log; error_log /u/apps/my_app/logs/error.log; location / { try_files $uri $uri/ /index.php; } location /wordpress/ { try_files $uri $uri/ /index.php?$args; } rewrite /wp-admin$ $scheme://$host$uri/ permanent; location ~* ^.+\.(ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|rss|atom|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2 |doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$ { access_log off; log_not_found off; expires max; } # Uncomment one of the lines below for the appropriate caching plugin (if used). #include global/wordpress-wp-super-cache.conf; #include global/wordpress-w3-total-cache.conf; # This location block matches anything ending in .php and sends it to # our PHP-FPM socket, defined in the upstream block above. location ~ \.php$ { try_files $uri =404; fastcgi_pass backend; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /u/apps/my_app/www$fastcgi_script_name; include fastcgi_params; } # This location block is used to view PHP-FPM stats location ~ ^/(php_status|php_ping)$ { fastcgi_pass backend; fastcgi_param SCRIPT_FILENAME $fastcgi_script_name; include fastcgi_params; allow 127.0.0.1; deny all; } # This location block is used to view nginx stats location /nginx_status { stub_status on; access_log off; allow 127.0.0.1; deny all; } } 

Кто-нибудь знает, что я делаю неправильно?

END EDIT

Я изменил свои постоянные ссылки по умолчанию на /% postname% /, и теперь ссылки в панели администратора WordPress дают мне 404 ошибки – не WordPress 404 страницы, nginx 404 страницы. Посмотрев, почему мне сказали, что это должно быть редактирование моего файла .htaccess или указание на то, что WordPress не может перезаписать .htaccess – файл .htaccess является неэксентирующим, а WordPress не дает никаких ошибок при изменении постоянных ссылок.

Я попытался создать пустой файл .htaccess в моей папке WordPress, предоставив ему 666 прав, изменив пользователя и группу на www-данные, а затем изменив постоянные ссылки – это не сработало. Затем я изменил его до изменения постоянных ссылок:

 # BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule> # END WordPress 

Когда это не сработало, я изменил RewriteBase на /wordpress/ перед тем, как снова изменить постоянные ссылки – все равно ничего.

Я также зашел в файл .conf моего сайта и изменил файл try_files $uri $uri/ /index.php; к следующему: перезапуск nginx и php5-fpm каждый раз;

try_files $uri $uri/ /index.php?$query_string;

try_files $uri $uri/ /index.php?q=$request_uri;

try_files $uri $uri/ /index.php?$args;

Я запускаю домашний сервер с nginx. Любые идеи о том, что здесь происходит?

Solutions Collecting From Web of "Изменение постоянных ссылок дает мне 404 ошибок на nginx"

Это Apache .htaccess переписывать правила, но вы заявили, что находитесь на сервере Nginx. Nginx не использует файл уровня каталогов на основе .htaccess , тем более он использует сам файл .htaccess . Вам нужно отредактировать конфигурацию сервера. В Codex есть образец детали :

 # WordPress single blog rules. # Designed to be included in any server {} block. # This order might seem weird - this is attempted to match last if rules below fail. # http://wiki.nginx.org/HttpCoreModule location / { try_files $uri $uri/ /index.php?$args; } # Add trailing slash to */wp-admin requests. rewrite /wp-admin$ $scheme://$host$uri/ permanent; # Directives to send expires headers and turn off 404 error logging. location ~* ^.+\.(ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|rss|atom|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$ { access_log off; log_not_found off; expires max; } # Uncomment one of the lines below for the appropriate caching plugin (if used). #include global/wordpress-wp-super-cache.conf; #include global/wordpress-w3-total-cache.conf; # Pass all .php files onto a php-fpm/php-fcgi server. location ~ [^/]\.php(/|$) { fastcgi_split_path_info ^(.+?\.php)(/.*)$; if (!-f $document_root$fastcgi_script_name) { return 404; } # This is a robust solution for path info security issue and works with "cgi.fix_pathinfo = 1" in /etc/php.ini (default) include fastcgi.conf; fastcgi_index index.php; # fastcgi_intercept_errors on; fastcgi_pass php; } 

Я использую wordpress multisite с пользовательской настройкой постоянной ссылки: /% category% /% postname% /

/etc/nginx/site-available/domain.conf

На сервере {

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

Если ваш корневой wordpress не является веб-корнем, а http://domain.com/wordpress/ :

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

Если вы используете старый wordpress с blogs.dir, добавьте: location ^ ~ /blogs.dir {internal; alias /var/www/wordpress/wp-content/blogs.dir; access_log off; log_not_found off; expax max; }

Проверьте конфигурацию nginx: sudo nginx -t

Перезагрузить nginx: sudo service nginx reload

Также попробуйте изменить параметры постоянной ссылки.

Если бы добавить этот фрагмент кода в /sites-available/your-settings-file и /sites-enabled/your-settings-file :

 server { [...] if (!-e $request_filename) { rewrite ^.*$ /index.php last; } [...] } 

Сейчас он работает для меня.