【问题标题】:How to use base url after mod_rewrite如何在 mod_rewrite 之后使用基本 url
【发布时间】:2015-04-11 21:03:17
【问题描述】:

我正在尝试使用apache mod_rewrite来实现以下

更改此网址: http://mywebsite.com/products.php?id=22

到这个网址 http://mywebsite.com/products/dog-house

我已启用所有内容,并且能够创建 url,并且可以毫无问题地重写。我遇到的问题是 products.php 位于 web 根目录中,并且使用新的重写规则,我的所有链接都已损坏并且我所有的 jquery 函数都不再工作了。由于重写,它现在认为这个文件在另一个子目录(产品)中,它把所有东西都扔掉了

这是我的 .htaccess 文件的副本

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^products/([a-zA-Z]+)$ product.php?id=$1

</IfModule>

我能够通过将其添加到 head 标签来解决 HTML 链接断开的问题

<base href="<?=BASE_URL;?>">

现在我面临的问题是 jquery.. 如果只有一种方法可以全局欺骗 jquery 使用'base',就像 HTML 被 base 标签欺骗一样..

这是一个不再工作的 jquery 函数示例

 function search_products_by_keyword()
    {
    var keyword = $('#product_keyword').val();
    $.post('ajax/search_products_by_keyword.php', {keyword:keyword},function(data){
       $('#main_content').html(data);
    });

   }

我现在意识到,一开始没有考虑使用 BASE_URL 是我的错。现在我有如此大量的这些 jquery 函数,以至于一个一个地遍历所有这些函数是一个可怕的想法。

提前感谢您的帮助

【问题讨论】:

    标签: php jquery apache .htaccess mod-rewrite


    【解决方案1】:

    您可以将 AJAX URL 更改为绝对 URL,为 AJAX URL 添加重写以在“虚拟文件夹”/products 中工作,或创建包含正确路径的 /products/ajax/search_products_by_keyword.php

    如果有太多无法修复第一个,我更喜欢第二个。

    RewriteRule ^products/([a-zA-Z]+)$ product.php?id=$1 [L]
    RewriteRule ^products/(.*)$ $1 [L]
    

    【讨论】:

    • 或者他可以添加另一个重写规则来重写 AJAX 调用!
    • @undone 这就是我的意思,我编辑了我建议的重写。
    猜你喜欢
    • 1970-01-01
    • 2011-08-13
    • 1970-01-01
    • 2014-07-04
    • 2015-05-06
    • 1970-01-01
    • 2016-12-17
    • 2010-12-15
    • 1970-01-01
    相关资源
    最近更新 更多