如何在mod_rewrite之后使用基本URL

时间:2015-04-11 21:03:18

标签: php jquery apache .htaccess mod-rewrite

我正在尝试使用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被基础标记欺骗一样..

以下是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函数,它们通过所有这些逐一进行是一个可怕的想法。

提前感谢您的帮助

1 个答案:

答案 0 :(得分:1)

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

如果有太多东西要修理第一个,我宁愿选择第二个。

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