It is already fixed in Drupal as it lives as hook_url_outbound_alter() now, as well as replacing taxonomy_term_path and hook_term_path(). As I explained in the issue that MT posted, the only way to fix this in D5 or D6 is to patch common.inc to move the custom_url_rewrite_outbound up in the execution of ulr(), before the url alias lookups and the return line for external links. However, I doubt this change would ever be approved since it's basically an API change because of when the function is called. This would be like changing hook_nodeapi('update') to be called before a node is updated instead of afterwards. We just probably have to live with the fact that this was a poorly implemented feature, and at least look forward to things happening correctly now with D7+. Dave Reid dave@davereid.net On Mon, Nov 9, 2009 at 4:56 PM, Ken Rickard <agentrickard@gmail.com> wrote:
I think you may need a patch. We had something similar come up in Drupal 5, and obviously missed this use-case when we had the call to custom_url_rewrite_outbound() inserted in the url() function.
The D5 version of Domain Access shipped with a functional backport of the patch, so best practice suggests fixing this against Drupal 8 (or 7 if we can call it an API bug) and then backport the patch to D6.
/me will vote that this is a bug in the API.
- Ken Rickard agentrickard
On Mon, Nov 9, 2009 at 11:25 PM, Mlen-Too Wesley <mlen.too.wesley@gmail.com> wrote:
Hello,
I am currently developing a module to help libraries rewrite links to external databases, such as ProQuest and LexisNexis, routing those links through an EZProxy or other proxy referral server.
For example, consider a resource located at: http://www.books24x7.com/marc.asp?bookid=30164
If accessed from an on-campus IP address, the resource will be available to the student. However, if off-campus, the student would either have to use VPN to route all their internet traffic through a university IP address or use an proxy referral server, such as EZProxy.
EZProxy is easier, so from the library home page, the link is rewritten to something such as:
http://ezproxy.example-library.edu/login?url=http://www.books24x7.com/marc.a...
This way, the student is presented with a login screen for authentication and then directed to the resource.
An easy module to make... or so I thought. Given the custom_url_rewrite_outbound() function, this kind of stuff should be easy
to
do in Drupal, but it is not. The url() function in common.inc returns the $path variable without any attempts to call custom_url_rewrite_outbout().
All would be well, if line 1408 of common.inc added the same functionality to external links in the url() function as it does for internal links. It just needs 3 lines:
if (function_exists('custom_url_rewrite_outbound')) { // Modules may alter outbound links by reference. custom_url_rewrite_outbound($path, $options, $original_path); }
Other than applying a patch, does anyone know another way around this issue?
I am not talking about Apache mod_rewrite or anything similar, Clean URLs, or the Path module and URL aliases. I am looking for a way to rewrite external URLs in anchor tags (links) without creating a wrapper function for url() or l()... or using JavaScript or AJAX.
Thanks!
MT
-- Ken Rickard agentrickard@gmail.com http://ken.therickards.com