.htaccess mod_rewrite URL查询

时间:2012-04-07 23:26:21

标签: php .htaccess mod-rewrite get

我希望有人可以帮助我。我正在构建一个CRM应用程序,需要帮助修改.htaccess文件来清理URL。我已经阅读了关于.htaccess和mod_rewrite的每篇帖子,我甚至尝试使用http://www.generateit.net/mod-rewrite/来获得结果但没有成功。这是我试图做的事情。

  • 让我们调用基本网址www.domain.com
  • 我们正在使用带有mysql后端的php和一些jQuery和javascript
  • 在“root”文件夹中是我的.htaccess文件。我不确定每个子目录中是否需要.htaccess文件,或者根目录中是否有足够的文件。
  • 我们有几个实际的文件目录,包括“crm”,“sales”,“finance”等。
  • 首先,我们要删除所有“.php”扩展,我可以自己做这些帖子。但是,查询公司和联系人ID是我被困的地方。
  • 现在,如果我加载www.domain.com/crm/companies.php,它会显示列表中的所有公司。
  • 如果我点击其中一家公司,它使用javascript调用“goto_company(x)”jQuery脚本,该脚本编写表单并根据公司的ID(x)提交该表单。这很好,并保持链接清洁,因为所有最终用户看到的是www.domain.com/crm/company.php。但是,您无法直接导航到公司。
  • 所以我们在PHP中添加了几行来查看POST是否为null并尝试使用GET而不是允许我们执行www.domain.com/crm/company.php?companyID=40,其中显示了#40数据库中。
  • 我需要重写此链接以及所有其他相关链接www.domain.com/crm/company/40
  • 我尝试了一切,似乎没有任何工作。请记住,我需要为“联系人”执行此操作,并且应用程序的销售部分也需要为“交易”执行某些操作。

总结一下我的目标:

  1. 将www.domain.com/crm/dash.php更改为www.domain.com/crm/dash
  2. 将www.domain.com/crm/company.php?companyID=40更改为www.domain.com/crm/company/40
  3. 将www.domain.com/crm/contact.php?contactID=27更改为www.domain.com/crm/contact/27
  4. 将www.domain.com/sales/dash.php更改为www.domain.com/sales/dash
  5. 将www.domain.com/sales/deal.php?dealID=6更改为www.domain.com/sales/deal/6
  6. (40,27和6只是任意数字作为例子)

    仅供参考,当我使用www.domain.com/crm/company.php?companyID=40的generateit.net/mod-rewrite网站作为示例时,以下是它告诉我放入我的内容。 htaccess文件:

    Options +FollowSymLinks
    RewriteEngine On
    RewriteRule ^crm/company/([^/]*)$ /crm/company.php?companyID=$1 [L]
    

    毋庸置疑,这不起作用。

    好的,这是根据以下Gohn67提供的帮助进行更新

    除了一个我似乎无法弄清楚的小错误之外,它正在工作。我在“crm”目录中创建了.htaccess文件。这是代码:

    RewriteEngine On
    RewriteRule ^test/([\d]+)$ /crm/company.php?companyID=$1 [L]
    

    这会将www.domain.com/test/40重写为www.domain.com/crm/company.php?companyID=40,因此它非常接近我的需要。

    错误是我无法用我的RewriteRule中的“company”替换“test”。我不知道为什么。除了“公司”这个词,我可以放任何东西;甚至是“crm”目录中其他PHP文件的名称,例如“contact”或“add-contact”。作为进一步的测试,我实际上将company.php重命名为test.php并将RewriteRule更改为:

    RewriteRule ^company/([\d]+)$ /crm/test.php?companyID=$1 [L]
    

    有效。

1 个答案:

答案 0 :(得分:1)

是的,生成的重写在那里看起来很奇怪。我不确定它在这里匹配的是什么([^/]*)

这是一个可能适合您的示例。我在我的系统上测试了这些。

RewriteEngine On
RewriteRule ^crm/dash/?$ /crm/dash.php [L]
RewriteRule ^crm/company/([\d]+)/?$ /crm/company.php?companyID=$1 [L]
RewriteRule ^crm/contact/([\d]+)/?$ /crm/contact.php?contactID=$1 [L]

这只是你的几条路线的例子。我承认它们可能更强大,因为这样做会导致很多重写规则,其中一些你可以用更好的正则表达式模式消除。但希望这能让你开始。

以下是一些考虑了子目录的更新重写规则。它还修复了上面的一个错误:

RewriteEngine On
RewriteBase /crm
RewriteRule ^dash/?$ dash.php [L]
RewriteRule ^company/([\d]+)/?$ company.php?companyID=$1 [L]
RewriteRule ^contact/([\d]+)/?$ contact.php?contactID=$1 [L]