Еще один мод переписать вопрос - PullRequest
0 голосов
/ 20 декабря 2010

Я пытался превратить свой URL в примере 1 в пример 2, используя mod_rewrite, но безуспешно? Я использую Godaddy.

Пример 1

http://www.example.com/categories/details.php?cat=fruit

Пример 2

http://www.example.com/categories/fruit/

Вот мой код переписывания модов в моей папке категорий.

Options +FollowSymLinks
Options -MultiViews
RewriteEngine on
RewriteBase /categories/
RewriteCond %{HTTP_HOST} ^example\.com$ [NC]
RewriteRule ^(.*)$ http://www.example.com/categories/$1 [R=301,L]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /(.*)index\.php(.*)\ HTTP/ [NC]
RewriteRule ^index\.php(.*)$ http://www.example.com/categories/$1 [R=301,L]

RewriteCond %{QUERY_STRING} ^cat=([a-zA-Z0-9]*)$
RewriteRule ^details\.php$ http://www.example.com/categories/%1.php [R=302,L]

1 Ответ

0 голосов
/ 20 декабря 2010

Попробуйте вместо этого.

RewriteCond %{QUERY_STRING} ^cat=([a-zA-Z0-9]+)
RewriteRule ^categories\/details\.php$ http://www.example.com/categories/%1 [R=302,L]

Это:

RewriteCond %{QUERY_STRING} ^cat=([a-zA-Z0-9]+)

Должно соответствовать запросу. Таким образом, он должен найти cat в начале запроса и соответствовать группе после cat, которая является var. Теперь вы также можете сопоставить подкатегории тоже. Чтобы сопоставить несколько, вы можете сделать что-то вроде

RewriteCond %{QUERY_STRING} ^cat=([a-zA-Z0-9]+)\&sub1=([a-zA-Z0-9]+)
RewriteCond %{QUERY_STRING} ^cat=([a-zA-Z0-9]+)\&sub1=([a-zA-Z0-9]+)\&sub2=([a-zA-Z0-9]+)

И тогда вы можете использовать% 1,% 2,% 3 в качестве переменных.

Это:

RewriteRule ^categories\/details\.php$ http://www.example.com/categories/%1 [R=302,L]

Будет соответствовать весь URL минус домен. И вы используете% 1, чтобы получить группу после перезаписи.

=============== СТАРЫЙ ===============

Я не очень хорошо разбираюсь в регулярных выражениях, но ^ будет соответствовать началу строки. Так что попробуйте.

^categories\/details\.php\?cat=(.*)$

Then you will need to use http://www.example.com/categories/$1

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

Вы можете заменить эту часть:

RewriteCond %{QUERY_STRING} ^cat=([a-zA-Z0-9]*)$
RewriteRule ^details\.php$ http://www.example.com/categories/%1.php [R=302,L]

с:

RewriteRule ^categories\/details\.php\?cat=(.*)$ http://www.example.com/categories/$1

Я не могу точно вспомнить, как работает mod_rewrite, поэтому я не хочу предоставлять вам недостоверную информацию с помощью rewriteCond.

Хорошо, используйте то, что у вас было раньше. Попробуйте просто добавить категории к нему.

RewriteCond %{QUERY_STRING} ^cat=([a-zA-Z0-9]*)$
RewriteRule ^categories\/details\.php$ http://www.example.com/categories/%1 [R=302,L]

Также примечание:

Я бы, вероятно, тоже использовал + вместо *. Так что ^? Cat = ([a-zA-Z0-9] +) $

Попробуйте что-то вроде этого:

RewriteCond %{QUERY_STRING} ^(.*&)?cat=([a-zA-Z0-9]+)$
RewriteRule ^categories\/details\.php$ http://www.example.com/categories/%2 [L]
...