Intereting Posts
Создание запроса с переменной тега также добавлено для более подробных результатов помощь по сокращению короткого кода Нет srcset для обрезанных эскизов как изменить меню в подменю $ query-> set ('post_type', 'post'); не работает WP_Error с get_category_parents Как найти идентификатор родительского дома таксономии на странице таксономии детей? Пользовательские почтовые метатеги Разбивка страницы WordPress на странице блога, работающая на странице результатов поиска Как я могу установить, чтобы сетевые сайты не использовали папки года / месяца по умолчанию? Страница продукта Woocommerce редактировать «из» текста Система самообслуживания, например, Reddit для WordPress? Как навсегда удалить таксономию Почему страницы в WordPress имеют иерархию, но меню также имеет иерархию? Отфильтруйте пользовательскую таксономию при отображении кнопки, которую могут показать все другие таксономии

Изменение постоянных ссылок дает мне 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; } [...] } 

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