Mod_rewrite /category.htm в / категорию - PullRequest
1 голос
/ 01 марта 2012

После всех этих тем переписывания модов здесь, в stackoverflow, я до сих пор не нашел ответа на свой вопрос. У меня есть топсайт, и в основном все, что я хочу сделать, - это изменить / index.php? Method = in & cat = Half + Life ("+" - это пробел) на / Half-Life .

До сих пор мне удалось изменить / index.php? Method = in & cat = Half + Life на / Half + Life.htm .

Я хочу, чтобы .htm исчез и изменил "+" на "-" .

Вот мой код, над которым я работаю, в моем файле .htaccess:

Options +FollowSymLinks
RewriteEngine on
RewriteRule (.*)\.htm$ /index.php?cat=$1 [L]

Еще один вопрос: это больше, как я могу назвать это «SEO-дружественным», если я делаю это таким образом?

Спасибо!

Ответы [ 3 ]

0 голосов
/ 01 марта 2012

То, что вы, похоже, спрашиваете, - это перевод URI в стиле SEO во внутренние, основанные на параметрах.К сожалению, механизм перезаписи не поддерживает глобальную подстановку, поэтому вам нужно решить эту проблему, например:

RewriteBase / 
RewriteRule (\w+)$              index.php?cat=$1       [L]
RewriteRule (\w+)+(\w+)$        index.php?cat=$1-$2    [L]
RewriteRule (\w+)+(\w+)+(\w+)$  index.php?cat=$1-$2-$3 [L]
# and so on ..

Но самый простой способ сделать это - использовать общий метод catch all:

RewriteRule ([-+\w]+)$              index.php?cat=$1       [L]

И используйте str_replace или preg_replace на вашем $_GET['cat'] внутри вашего inddex.php.

0 голосов
/ 02 марта 2012

Проблема с удалением .htm из-за того, что он переписывает каждый URL-адрес. Это будет включать URL для файлов, которые действительно существуют (например, index.php). Есть несколько подходов, которые вы можете использовать.

Предположим, что у всех ваших реальных файлов есть точка (.) В имени файла, перепишите все остальное. Если у вас действительно есть файлы или каталоги с именами без расширения, это не сработает. Или, если вы хотите, чтобы в некоторых категориях были точки.

Options +FollowSymLinks
RewriteEngine on
RewriteRule ([^\.]+)$ /index.php?cat=$1 [L]

Вы можете иметь правило перезаписи игнорировать реально существующие файлы

Options +FollowSymLinks
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) /index.php?cat=$1 [L]
0 голосов
/ 01 марта 2012

Я думаю, что было бы проще изменить php, чтобы заменить тире пробелами, но если вы действительно хотите использовать htaccess:

RewriteRule (.*)-(.*)\.(htm)$ "$1 $2.$3"
RewriteRule (.*)\.htm$ /index.php?cat=$1 [L]
...