将mod_rewrite /category.htm转换为/ category

时间:2012-03-01 13:53:41

标签: .htaccess mod-rewrite seo

在stackoverflow的所有mod重写主题之后,我仍然没有找到我的问题的答案。我有一个topsite,基本上我想做的就是将 /index.php?method=in&cat=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 :(得分:0)

我认为更改php以用空格替换破折号会更容易,但如果你真的想使用htaccess:

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

答案 1 :(得分:0)

从中移除.htm的问题在于它会重写每个网址。这将包括实际存在的文件的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]

答案 2 :(得分:-1)

您似乎要问的是将SEO样式的URI转换为基于内部参数的URI。不幸的是,重写引擎不支持全局替换,因此您需要对此进行修改,例如:

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 ..

但最简单的方法是使用一般的全部捕获:

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

str_replace内的preg_replace上使用$_GET['cat']inddex.php