我目前在本地 Drupal 7 环境中遇到问题。由于 Drupal 7 站点配置可能会变得非常复杂,因此我将尝试尽可能详细地解释我的问题。
该站点位于我本地环境的子文件夹中,我的本地主机上运行了更多项目,所以最好我希望将项目分开。此外,对于这个站点,我有两个单独的文件夹,一个用于开发,一个用于生产,它们共享同一个数据库,所以我认为通过添加假域的解决方案在这里不起作用(如果我错了,请纠正我)。
所以主要问题似乎是 AJAX 请求不包括基本 URL 或基本路径,我无法登录,http://localhost/mysite/devel/docroot/user
因为 AJAX 请求将转到http://localhost/system/ajax
或http://localhost/ajax_register/login/ajax
因此不会返回正确的 JSON 响应。
如何解决?Apache 中的配置是否httpd.conf
足以.htaccess
完成这项工作?
这是我到目前为止所做的,首先是settings.php
:
$base_url = 'http://localhost/mysite/devel/docroot';
$base_path = '/mysite/devel/docroot/';
接下来,我尝试了以下重写规则httpd.conf
:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_REFERER} .*devel.*$ [OR]
RewriteRule ^/sites/(.*)$ /mysite/devel/docroot/sites/$1
RewriteRule ^/system/(.*)$ /mysite/devel/docroot/system/$1
RewriteRule ^/ajax_register/(.*)$ /mysite/devel/docroot/ajax_register/$1
</IfModule>
index.php
在这里,我在响应文本而不是预期的 JSON 响应中得到了以下带有 HTML(似乎来自 )的弹出窗口:
An AJAX HTTP error occurred.
HTTP Result Code: 404
Debugging information follows.
Path: http://localhost/ajax_register/login/ajax
StatusText: error
ResponseText: lots of HTML...
然后没有重写规则,而是使用代理代替httpd.conf
:
<IfModule mod_proxy.c>
ProxyRequests Off
ProxyPreserveHost On
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
RewriteEngine on
ProxyPass /system/ http://localhost/mysite/devel/docroot/system/
ProxyPassReverse /system/ http://localhost/mysite/devel/docroot/system/
<Location /system/>
Order allow,deny
Allow from all
</Location>
ProxyPass /ajax_register/ http://localhost/mysite/devel/docroot/ajax_register/
ProxyPassReverse /ajax_register/ http://localhost/mysite/devel/docroot/ajax_register/
<Location /ajax_register/>
Order allow,deny
Allow from all
</Location>
</IfModule>
对于代理指令,POST AJAX 请求给出了类似的 404 not found 错误,只是现在响应文本是 JSON 格式。
An AJAX HTTP error occurred.
HTTP Result Code: 404
Debugging information follows.
Path: http://localhost/ajax_register/login/ajax
StatusText: error
ResponseText: some JSON code...
如果没有重写规则和代理指令,我会在 JavaScript 弹出窗口中收到以下错误:
An AJAX HTTP error occurred.
HTTP Result Code: 404
Debugging information follows.
Path: http://localhost/ajax_register/login/ajax
StatusText: error
ResponseText:
404 Not Found
Not Found
The requested URL /ajax_register/login/ajax was not found on this server.
最后,.htaccess
我尝试将基础重写为以下内容:
RewriteBase /mysite/devel/docroot/
在这里我得到了与重写规则和代理指令都被注释掉的情况相同的 404 错误httpd.conf
。我还想将它添加到数据库中,在表中languages
我已将英语语言的域设置为localhost
.
我不明白,为什么AJAX URL请求前面没有包含base?我该如何添加它?当我Drupal.settings.basePath
在 Firebug 中查询时,我确实得到了我在settings.php
:S 中设置的值 - 有人有什么想法吗?