我正在尝试使用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函数,它们通过所有这些逐一进行是一个可怕的想法。
提前感谢您的帮助
答案 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]