0

誰かが私を助けてくれることを望んでいました。CRM アプリケーションを作成していますが、.htaccess ファイルを変更して URL をクリーンアップする方法についてサポートが必要です。私は .htaccess と mod_rewrite に関するすべての投稿を読みました。 http://www.generateit.net/mod-rewrite/を使用して結果を取得しようとしましたが、成功しませんでした。これが私がやろうとしていることです。

  • ベース URL を www.domain.com としましょう
  • 私たちはmysqlバックエンドといくつかのjQueryとjavascriptでphpを使用しています
  • その「ルート」フォルダーには、私の .htaccess ファイルがあります。各サブディレクトリに .htaccess ファイルが必要かどうか、またはルートに 1 つあれば十分かどうかはわかりません。
  • 「crm」、「sales」、「finance」など、ファイルの実際のディレクトリがいくつかあります。
  • まず、これらの投稿のおかげで自分でできるすべての「.php」拡張子を取り除きたいと思います。ただし、会社と連絡先 ID のクエリは、私が立ち往生している場所です。
  • 現在、www.domain.com/crm/companies.php を読み込むと、すべての企業がリストに表示されます。
  • 会社の 1 つをクリックすると、javascript を使用して「goto_company(x)」jQuery スクリプトが呼び出され、フォームが作成され、会社の ID (x) に基づいてそのフォームが送信されます。これは問題なく機能し、エンド ユーザーに表示されるのは www.domain.com/crm/company.php だけなので、リンクはクリーンに保たれます。ただし、会社に直接移動することはできません。
  • そのため、POST が null かどうかを確認するために PHP に数行を追加し、代わりに GET を試行して、データベースから会社 #40 を表示する www.domain.com/crm/company.php?companyID=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]

言うまでもなく、それはうまくいきませんでした。

OK、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 で「test」を「company」という単語に置き換えることができないことです。何故かはわからない。そこには「会社」という言葉以外は何でも入れることができます。「contact」や「add-contact」など、「crm」ディレクトリ内の他の PHP ファイルの名前も含まれます。さらなるテストとして、実際に 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 に答える