1

我已经为我的.htaccess文件苦苦挣扎了好几个星期了,我改变了很多次,但它就是行不通。

我的.htaccess文件中有这个:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^/([^./]+)\.html$ category.php?id=$1 
RewriteRule ^/([^./]+)\.html$ tag.php?id=$1 
RewriteRule ^/([^./]+)\.html$ play.php?id=$1 

但它不起作用。

4

2 回答 2

0

您确定在 Apache 中打开了 mod_rewrite 吗?您可以访问 httpd.conf 吗?最好在那里进行重定向而不是使用 .htaccess 文件。

于 2012-10-04T12:36:06.687 回答
0
  1. 您的条件仅适用于第一条规则。每一组都只适用于紧随其后RewriteCond的。所以条件只适用,最后两条规则根本没有条件。RewriteRuleRewriteRule ^/([^./]+)\.html$ category.php?id=$1

  2. 您的条件是将存在的东西重写为其他东西,这将导致重写循环。你可能想要:

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    
  3. 您的第二条和第三条规则将永远不会被应用,因为如果有人请求/some-page.html第一条规则的正则表达式将匹配它并将 URI 重写为/category.php?id=some-page,那么 next to 规则将永远不会匹配,因为第一条规则已经将 URI 重写为category.php

  4. 您的正则表达式与前导斜杠匹配,在 htaccess 文件中的重写规则中应用的 URI 已去除前导斜杠,因此您希望改为:

    RewriteRule ^([^./]+)\.html$ category.php?id=$1 
    

1、2和4很容易。3,没那么多。您将不得不找出一种独特的方式来将 html 页面表示为类别、标签或游戏。你不能让所有 3 个看起来都一样,没有办法告诉你想要哪一个。拿:

/something.html

这应该是一个类别吗?一个标签?还是一出戏?谁知道呢,你的重写规则肯定不会。但是,如果您在每个前面都加上一个关键字,那么您可以区分:

/category/something.html
/tag/something.html
/play/something.html

你的规则看起来像:

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^category/([^./]+)\.html$ category.php?id=$1 

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^tag/([^./]+)\.html$ tag.php?id=$1 

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^play/([^./]+)\.html$ play.php?id=$1 
于 2012-10-04T19:16:36.170 回答