2013-08-28 5 views
1

В моем приложении я хочу реализовать URL переписывания, чтобы сделать ссылки SEO дружественныйURL Rewrite mod_rewrite вопросы

1.http://example.com/item.php?act=view&id=192 
2.http://example.com/feedback.php?id=146 

К

1.http://example.com/items/itemsname 
2.http://www.example.com/username 

Вопросы

1) Я немного запутался, хотя, мне нужно изменить все ссылки в моем коде на http://example.com/items/itemsname и использовать переписывание, чтобы перевести его на http://example.com/item.php?act=view&id=192?

или

я могу оставить свой код, как это http://example.com/item.php?act=view&id=192 и просто переписать его, чтобы перевести http://example.com/items/itemsname (вариант 2 выглядит более реалистично, как в противном случае без .htaccess ничего не будет работать)

2) Как можно это делается в Apache и Php?

ответ

1

У вас есть несколько способов сделать это, я бы сказал, что самый простой способ с вашей текущей PHP будет изменить свои ссылки на что-то вроде этого:

http://example.com/items/id-itemsname 
http://example.com/id-username 

Так реальный пример будет выглядеть следующим образом :

http://example.com/items/192-Wash-Machine 
http://example.com/feedback/146-Jon-Lin 

И тогда вы можете легко использовать эти правила, чтобы преобразовать его:

Options +FollowSymLinks -MultiViews 

RewriteEngine On 
RewriteBase/

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^items/([0-9]+)-.*$ /item.php?act=view&id=$1 [L] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^feedback/([0-9]+)-.*$ /feedback.php?id=$1 [L] 

Таким образом, вы можете полностью игнорировать заголовок и извлекать из него только идентификатор и использовать свой текущий скрипт, сохраняя при этом название для пользователей.

Другой способ, как вы упомянули, и это будет выглядеть следующим образом:

http://example.com/items/itemsname 
http://example.com/feedback/username 

Вы бы тогда нужно изменить вам PHP, чтобы найти обратную связь и предметы по имени, так что они будут выглядеть следующим образом:

http://example.com/item.php?act=view&name=Wash Machine 
http://example.com/feedback.php?username=Jon Lin 

И правило было бы что-то вроде этого:

Options +FollowSymLinks -MultiViews 

RewriteEngine On 
RewriteBase/

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^items/([^/]+)/?$ /item.php?act=view&name=$1 [L] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^feedback/([^/]+)/?$ /feedback.php?username=$1 [L] 
+0

RewriteCond должны быть RewriteRule в е я думаю, спасибо за подробный ответ! – Athanatos

+0

@ Атанатос, это мое плохое, это была опечатка, спасибо за то, что заметили это;) – Prix

0

Это поможет вам: URL Rewrites and 301 Redirects - How Does It All Work?

Лично я думаю, что правильный путь изменения все ссылки и с помощью файла .htaccess переписать URL (очевидно, нужно будет преобразовать имя-хороший [ака слизня ] в id после перезаписи). Я стараюсь избегать перенаправления, если они не нужны на 100%, и это не так. Что-то вроде этого:

.htaccess:

RewriteRule ^items/([0-9a-zA-Z\-\_].*)$ item.php?act=view&slug=$1 [L] 

Что касается ссылок, вы можете изменить их вручную (я рекомендую) или с помощью JavaScript, что делает какой-то перевести функцию после клика пользователя.

1

Я немного запутался, хотя, мне нужно, чтобы изменить все ссылки в моем коде http://example.com/items/itemsname и использовать перезапись, чтобы перевести его на http://example.com/item.php?act=view&id=192?

Вы хотите сделать это, если сможете. Это означает, что у вас нет другого уровня обработки для каждой ссылки, которая будет нажата.

Перевод немного неоднозначный. Например:

/username ->/feedback.php?id=146

«Имя пользователя» Я предполагаю, что это что-то вроде «САМ», но «идентификатор» является числом. Модуль перезаписи знает ничего об этом сопоставлении, ничего в файле htaccess ничего не знает о том, как карты usernames отображаются в идентификаторы или как отображать имена элементов для идентификаторов. Единственное, что можно сделать, это использовать RewriteMap, который определен в конфигурации server/vhost, которая обращается к этому сопоставлению.

Что вам лучше делать, это использовать php. Сопоставьте элементы и имена пользователей с сценами item.php и feedback.php. Попросите эти сценарии определить идентификатор, основанный на именах. И имеют эти скрипты, проверяя URI запроса, чтобы проверить, был ли запрос для файлов php напрямую, а не поисковыми URL-адресами SEO и при необходимости перенаправлять их.

Единственное, что вы хотите mod_rewrite сделать, это сделать вперед отображение:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond ^item/(.*)$ /item.php?act=view&name=$1 [L] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond ^(.*)$ /feedback.php?name=$1 [L] 

Здесь вы бы искать для параметра «name», карта тех, с идентификаторов, что вам нужно, а затем продолжить нормально ,