重定向不适用于nginx -- 7 领域 和 redirection 领域 drupal 相关 的问题

Redirect does not work on nginx


3
vote

问题

中文

我正在将旧站点迁移到drupal(使用 migrate 模块),我管理了直接在代码中,使用重定向

中的所有旧网址重定向到新的Drupal URL。例如:

www.mysite.com/userprofile.php?user=5

重定向到:

www.mysite.com/it/community/peoples/mr-max

这对我的Dev环境有效,Apache在我的Dev环境上,但不适用于Nginx的Live环境。

首先尝试使用旧网址,我收到了一个带有消息的空白页"未指定的输入文件" 。

所以我已经改变了虚拟主机来自:

  location ~ .php$ {   #fastcgi_split_path_info ^(.+.php)(/.+)$;   #NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini   include fastcgi_params;   fastcgi_param SCRIPT_FILENAME $request_filename;   fastcgi_pass php-fpm; }   

到:

  location ~ .php$ {   #fastcgi_split_path_info ^(.+.php)(/.+)$;   #NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini   include fastcgi_params;   fastcgi_param SCRIPT_FILENAME index.php;   fastcgi_pass php-fpm; }   

结果:不再"未指定输入文件" 。空白页,但重定向不起作用,并且所有旧网址都显示了我的首页。

这里是我的虚拟主机的其他设置,如果可以提供帮助:

  location ~ ..*/.*.php$ {   return 403; } location ~ ^/sites/.*/private/ {   return 403; } location ~ (^|/). {   return 403; } location / {   try_files $uri @drupal; } location @drupal {   # For D7 and above:   # Clean URLs are handled in drupal_environment_initialize().   rewrite ^ /index.php; } location ~ .php$ {   #fastcgi_split_path_info ^(.+.php)(/.+)$;   #NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini   include fastcgi_params;   fastcgi_param SCRIPT_FILENAME index.php;   fastcgi_pass php-fpm; }   

我必须更改/添加到上面的conf的哪种设置,以便正确地重定向?

英文原文

I'm migrating an old site to Drupal (using migrate module), and I've managed directly in code all old urls to redirect to new Drupal urls using redirect module, for example:

www.mysite.com/UserProfile.php?user=5

Redirects to:

www.mysite.com/it/community/peoples/mr-max

This works very fine on my dev environment with apache, but doesn't works on live environment with nginx.

At first try with old url, I received a blank page with the message "No input file specified."

So I've changed virtual host conf from:

location ~ \.php$ {   #fastcgi_split_path_info ^(.+\.php)(/.+)$;   #NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini   include fastcgi_params;   fastcgi_param SCRIPT_FILENAME $request_filename;   fastcgi_pass php-fpm; } 

to:

location ~ \.php$ {   #fastcgi_split_path_info ^(.+\.php)(/.+)$;   #NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini   include fastcgi_params;   fastcgi_param SCRIPT_FILENAME index.php;   fastcgi_pass php-fpm; } 

RESULT: no more "No input file specified." blank page, but redirect doesn't works and my front page is shown for all old urls.

Here's other settings from my virtual host, if can help:

location ~ \..*/.*\.php$ {   return 403; } location ~ ^/sites/.*/private/ {   return 403; } location ~ (^|/)\. {   return 403; } location / {   try_files $uri @drupal; } location @drupal {   # For D7 and above:   # Clean URLs are handled in drupal_environment_initialize().   rewrite ^ /index.php; } location ~ \.php$ {   #fastcgi_split_path_info ^(.+\.php)(/.+)$;   #NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini   include fastcgi_params;   fastcgi_param SCRIPT_FILENAME index.php;   fastcgi_pass php-fpm; } 

What kind of setting I have to change/add to the above conf to make redirect working correctly?

     
       
       

回答列表

3
 
vote
vote
最佳答案
 

最后,有人将我重定向到正确的地方

这是一个缺少的代码,它是技巧:

  location ~ .php$ {             error_page 418 = @rewrite;             recursive_error_pages on;              fastcgi_split_path_info ^[^=](.+.php)(/.+)$;             include fastcgi_params;              if ( $uri = /index.php ) {                     break;             }              if ( !-e $document_root$fastcgi_script_name) {                     return 418;             }              #NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini             fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;             fastcgi_intercept_errors on;             fastcgi_read_timeout 240;             fastcgi_pass  127.0.0.1:9000; }   

源: http://wiki.nginx.org/drupal

(链接建议在 https://groups.drupal.org/node/405038 )

 

Finally, someone redirected me to the right place

Here's the missing code that does the trick:

location ~ \.php$ {             error_page 418 = @rewrite;             recursive_error_pages on;              fastcgi_split_path_info ^[^=](.+\.php)(/.+)$;             include fastcgi_params;              if ( $uri = /index.php ) {                     break;             }              if ( !-e $document_root$fastcgi_script_name) {                     return 418;             }              #NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini             fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;             fastcgi_intercept_errors on;             fastcgi_read_timeout 240;             fastcgi_pass  127.0.0.1:9000; } 

Source: http://wiki.nginx.org/Drupal

(link suggested in https://groups.drupal.org/node/405038)

 
 
0
 
vote

我有一个类似的问题:将旧站点迁移到URL中的PHP扩展,并使用重定向模块保留SEO,nginx返回"文件未找到" 。

上述解决方案对我的配置不起作用。相反,一个人做了:

  location ~ .php$|^/update.php {     #old urls with php extension redirect     if ($request_uri ~ .*.php.*) {       error_page 404 =  @rewrite;     }      fastcgi_split_path_info ^(.+?.php)(|/.*)$;     fastcgi_index index.php;     fastcgi_param SCRIPT_FILENAME $request_filename;     fastcgi_intercept_errors on;     fastcgi_read_timeout 60;     include fastcgi_params;     fastcgi_pass 127.0.0.1:9000; }   
 

I got a similar problem : migrating old site with php extension in Urls, and using Redirect module to preserve SEO, nginx returned "File not found".

The above solution did not work for my config. Instead that one did the trick :

location ~ \.php$|^/update.php {     #old urls with php extension redirect     if ($request_uri ~ .*.php.*) {       error_page 404 =  @rewrite;     }      fastcgi_split_path_info ^(.+?\.php)(|/.*)$;     fastcgi_index index.php;     fastcgi_param SCRIPT_FILENAME $request_filename;     fastcgi_intercept_errors on;     fastcgi_read_timeout 60;     include fastcgi_params;     fastcgi_pass 127.0.0.1:9000; } 
 
 

相关问题

0  如何将链接呈现为菜单选项卡  ( How to render links as menu tabs ) 
我已创建一个生成一些链接的块。我想在网站上显示这些链接作为菜单选项卡。这是我写入内部的PHP代码。 <?php $current_url = current_path(); $param = explode("/", $current_url); $nid = $param[1]; $type ...

0  基于分类术语的观点分页  ( Views pagination based on taxonomy terms ) 
我在drupal 7中有一个存档视图页面,在10项之后分手,自己分组并按分类学期排序("发行日期" )。 我被问到是否有可能使寻呼机更具描述性的基于分类词汇,而不是它只是"转到第2页" ,它是"转到问题2012-07- 06到2012-06-29"。 任何想法我是怎么做到的?谢谢! ...

0  在不创建页面的情况下创建表单  ( Create a form without creating a page ) 
似乎足够简单,可以使用表单API在DRUPAL 7中创建表单,但是,我发现的一切都显示您必须使用hook_menu()添加页面,然后生成那种方式的表格。 我想创建一个独立的表单,然后只使用drupal_get_form()和drupal_render()显示表单来呈现表单。 如何在不创建自己的页面的情况下创建自定义表...

1  允许第三方模块更改模块执行的查询  ( Allowing third party modules to alter the query executed by a module ) 
我正在开发一个暴露公共API的模块,该模块包括在他自己的数据库表中保存数据的函数,它应该从使用我的模块的任何模块中使用。 模块检查数据库的内容,以验证用户是否不允许访问该站点,或者如果在其用户配置文件中更改某些内容时应使用错误消息通知用户。 考虑到在大多数情况下,数据库表是唯一要检查的表,如果我更改代码以允许第三方模...

0  上下文选择子菜单  ( Context select submenu ) 
我正在尝试通过上下文规则启用子菜单项。 但是,上下文一致尝试仅选择顶部父项,而不是子菜单。我在完全清洁的安装时尝试了几次,结果相同。 我做错了什么,或者应该这样做吗? 如何使用上下文规则打开子菜单项? 谢谢! ...

3  如何将<div>标记添加到视图列表的输出?  ( How do i add div tags to the output of a view list ) 
我使用的视图的输出包含以下代码。 <li class="views-row views-row-1 views-row-odd views-row-first"> <div class="views-field-field-cimg-fid"> <span class="field-content...

2  如何自定义XMLSitemap?  ( How to customize the xmlsitemap ) 
我安装了 xmlsitemap 模块,并希望自定义站点地图。 例如,我想排除一些具有一定术语参考字段的节点。 我还希望能够为每个内容类型创建单独的站点地图。 有没有办法做到这一点? 否则,我可能可以使用 service_views 模块生成XML SiteMaps。 ...

1  在块中显示自定义字段  ( Show a custom field in a block ) 
我疯了试图在侧栏块中显示自定义字段(现在在核心)的值。我试图用渲染函数来显示它,直接调用字段,没有运气。 我有一个名为"content1" 的自定义内容类型,以及名为"field_test1" 的自定义字段;我希望在查看页面节点时将在块上显示该值。 你有什么建议如何做到吗? ...

5  在Drupal 7中删除或隐藏搜索块上的提交按钮  ( Remove or hide the submit button on search block in drupal 7 ) 
我需要在Drupal 7中的搜索块上进行一些自定义主题。 特别是,我需要将一个类添加到提交按钮,使其不可见并从内容流中删除它。 o: <div class="form-actions form-wrapper" id="edit-actions"> <input type="submit" id="edit-...

3  hook_theme_registy_alter()和主题()  ( Hook theme registry alter and theme ) 
如何 hook_theme_registry_alter() 关联,例如, 99887669 ,具有"图像" 主题ID? ...

1  如何调试电子邮件功能?  ( How can i debug an email function ) 
我正在使用flag_friend模块,并希望自定义朋友请求后发送的电子邮件。 如何开发电子邮件功能的最佳方式,如此,您无法重新加载页面以查看更改? 我必须返回,删除朋友请求并创建一个新的请求来触发下一个电子邮件,然后等待电子邮件到达。 ...

6  如何将“传递给Drupal_Attributes()的参数1”解析为arrys_settings_form()上的array“错误?  ( How do i resolve the argument 1 passed to drupal attributes must be an array ) 
我通常不会在这样的特定问题上发布,并询问特定问题的帮助,但我在浪费时间的绳索结束时... 我有一个简单的d7模块如下所示,当我加载页面时(谁的菜单项正是我想要的地方)我收到以下错误: 可恢复的致命错误:传递给Drupal_Attributes()的参数1必须是阵列,在第3106行中调用/por/to/site/p...

1  sop_form_alter()中保存和预览差异  ( Save and preview differences in hook form alter ) 
我创建了一个使用 hook_form_alter()。加载表单(节点/添加)时,我隐藏一个字段,挂钩正常工作。当我完成表单的预览时,会出现问题。当表单再次出现时,我会看到隐藏的字段(挂钩不起作用)。为什么? 我通过线隐藏字段: $form['field_versio']['und']['0']['value'][...

1  显示多个“未使用”视图  ( Multiple unused views displays ) 
我在drupal中创建了一个大量定制的网站。我想用视图用作具有多个选项的页面的数据源,其中每个选项对应于视图中的不同显示。我想要使​​用视图的原因是它们可以通过UI轻松配置,因此如果需要,它们易于调整/更改。 不幸的是,似乎我无法创建一个没有某种形式的副作用的视图的显示(即页面显示将创建一个新页面)。有没有人有任何明...

3  生产力工具可以帮助我一次添加多个字段  ( Productivity tool to help me add multiple fields at once ) 
是否有任何Drupal生产力工具,可以帮助我同时创建多个字段?我正在追求关于/ admin / structs / types / manage / node_type /字段下的字段的实际创建。我有一百个田地创造,每次创建一个时,似乎都令人疑惑。 ...




© 2021 it.wenda123.org All Rights Reserved. 问答之家 版权所有


Licensed under cc by-sa 3.0 with attribution required.