在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友好”?
谢谢!
答案 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
。