寻找一个rewriteRule解决方案

时间:2016-06-24 12:39:32

标签: php .htaccess mod-rewrite

我有一个网址重写问题。 我网站的所有主题网址都在www.mywebsite.com/topic.php?topic=id上 我想将这些网址更改为www.mywebsite.com/topic-id.html

我在.htaccess文件中用它做了:

Options +FollowSymlinks

RewriteEngine on

RewriteRule ^topic-([0-9]+)\.html$ /topic.php?topic=$1

现在我希望所有指向/topic.php?topic=id的网址都像topic-id.html一样被重写,以便只为用户显示一个网址,而不会重写我的所有代码。 可以这样做吗?

我用那种方式尝试了[R]标志:

RewriteRule ^topic-([0-9]+)\.html$ /topic.php?topic=$1 [R]

但它与我正在寻找的相反,因为它将所有网址(topic-id.html)转换为(topic.php?topic = id)。

我指明,我没有寻找"重复内容问题"

的解决方案

任何帮助都会很棒,谢谢

3 个答案:

答案 0 :(得分:0)

你可以试试这个,我为你跳这个工作

RewriteCond %{THE_REQUEST} \s/topic\.php\?id=([_0-9a-zA-Z-]+)\s [NC]
RewriteRule ^%1? [R=301,L]
RewriteRule ^([_0-9a-zA-Z-]+)$ /topic.php?id=$1 [L]


RewriteCond %{THE_REQUEST} \s/topic\.php\?id=([_0-9a-zA-Z-]+)\s [NC]
RewriteRule ^ %1.html? [R=301,L]
RewriteRule ^([_0-9a-zA-Z-]+?)(?:\.html)?$ /index.php?id=$1 [NC,L]

答案 1 :(得分:0)

将以下内容置于现有规则之上(RewriteEngine on行旁边):

RewriteCond %{THE_REQUEST} /topic\.php\?id=(.+)\sHTTP [NC]
RewriteRule ^ /topic-%1.html [L,R]

答案 2 :(得分:0)

您需要使用的是:

RewriteEngine On
RewriteRule ^topic-([^-]*)\.html$ /topic.php?topic=$1 [L]