2012-04-07 4 views
0

Я надеялся, что кто-то может помочь мне. Я создаю CRM-приложение и нуждаюсь в помощи, изменяя файл .htaccess для очистки URL-адресов. Я прочитал все сообщения, касающиеся .htaccess и mod_rewrite, и я даже попытался использовать http://www.generateit.net/mod-rewrite/ для получения результатов без каких-либо успехов. Вот что я пытаюсь сделать..htaccess mod_rewrite URL запроса

  • Давайте назовем базовый URL www.domain.com
  • Мы используем PHP с тузда фоновым и некоторыми JQuery и JavaScript
  • В этой папке «корневой» мой файл .htaccess. Я не уверен, нужен ли мне файл .htaccess в каждом подкаталоге, или если в корневой папке достаточно.
  • У нас есть несколько фактических каталогов файлов, включая «crm», «sales», «finance» и т. Д.
  • Прежде всего, мы хотим снять все расширения «.php», которые я могу сделать сам, спасибо на эти должности. Тем не менее, запрос компании и идентификаторы контактов - это место, где я застрял.
  • Прямо сейчас, если я загружаю www.domain.com/crm/companies.php он отображает все компании в списке.
  • Если я нажму на одну из компаний, она использует javascript для вызова сценария jQuery «goto_company (x)», который записывает форму и передает эту форму на основе идентификатора (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 to 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 представляют собой лишь произвольные числа в качестве примеров)

Только для справки, когда я использовал сайт generateit.net/mod-rewrite, используя www.domain.com/crm/company.php?companyID=40, вот что он сказал мне, чтобы я вставлял свои .htaccess файл:

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

Излишне говорить, что это не сработало.

OK здесь является обновленной на основе справки, полученные от Gohn67 ниже

Он работает за исключением небольшой ошибки я не могу показаться, чтобы выяснить. Я создал файл .htaccess в каталоге «crm». Вот код:

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. Я не знаю почему. Я могу положить что-то, кроме слова «компания»; даже имена других файлов PHP в каталоге «crm», такие как «контакт» или «добавочный контакт». В качестве дополнительного теста я на самом деле переименованы company.php в test.php и изменил RewriteRule на:

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

, который работал.

+0

Что произойдет, если вы замените '^ CRM/компании/([^ /] *) $' с '^/CRM/компании/([^ /] *) $ '? –

+0

Я попытался добавить «/», как описано выше, но 1), что ничего не меняет, и 2) я прочитал сообщение, в котором указано, что «/» необходимо удалить, как это подразумевается. Я супер-начинающий, когда дело доходит до этого .htaccess-бизнеса, поэтому я не уверен, какой путь прав, а что было неправильно. Все, что я знаю, не работает! – 1001001

ответ

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] 
+0

Какие проблемы вы испытываете? – Gohn67

+0

Благодарим за отзыв. Ваш пример выше работал, но я закончил настройку одной вещи; Я создал файл .htaccess в каталоге «crm» и удалил префикс «crm /» из правила, чтобы он читал: 'code' RewriteRule^company/([\ d] +) (/) $/crm/company.php? companyID = $ 1 [L] 'code' По сути, когда я запрашиваю http://www.domain.com/crm/yeah/40/, он перенаправляет меня должным образом на http://www.domain.com/crm /company.php?companyID=40. Я также не могу использовать «компанию» в качестве запрашивающего URI. Не знаю, почему, но мне пришлось изменить его на «привет» в качестве теста. – 1001001

+0

Хм, я думаю, если вы поместите htacess в каталог crm, вам нужно будет добавить каталог RewriteBase, поэтому вы добавите 'RewriteBase/crm' после' RewriteEngine On'. Я собираюсь проверить это сейчас, но это общий способ сделать это. – Gohn67

Смежные вопросы