0

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

  • 我们将基本 URL 称为 www.domain.com
  • 我们正在使用带有 mysql 后端和一些 jQuery 和 javascript 的 php
  • 在那个“根”文件夹中是我的 .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 是否为空,然后尝试使用 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

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

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

这有效。

4

1 回答 1

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]
于 2012-04-08T02:28:11.137 回答