Mod rewrite Apache mod_重写规则不';不适合不同的页面

Mod rewrite Apache mod_重写规则不';不适合不同的页面,mod-rewrite,apache2,Mod Rewrite,Apache2,我在.htaccess文件中有一个关于apache2的重写规则,它在posts.php页面上运行良好 mysite.com/post.php?id_name=this-is-the-title-of-my-site 变成 mysite.com/this-is-the-title-of-my-site 我希望对cats.php页面使用相同的规则,以便 mysite.com/cats.php?cat_label=articles 变成 mysite.com/articles 我使用了相同的

我在.htaccess文件中有一个关于apache2的重写规则,它在posts.php页面上运行良好

mysite.com/post.php?id_name=this-is-the-title-of-my-site 
变成

mysite.com/this-is-the-title-of-my-site
我希望对cats.php页面使用相同的规则,以便

mysite.com/cats.php?cat_label=articles
变成

mysite.com/articles
我使用了相同的规则并更改了文件名和参数,但是cats.php页面的规则似乎失败了,并且被posts.php规则覆盖

我宁愿不这样做,但我不介意改变结构成为

mysite.com/cats/articles
这是我目前正在使用的.htaccess文件

Options +FollowSymLinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ post.php?id_name=$1 [L,QSA]


RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ cats.php?cat_label=$1 [L,QSA]

非常感谢所有帮助

标记
[L]
表示“最后一个”,如中所示,当该规则匹配时,它是测试的最后一个重写规则。您需要一种方法来区分这两种类型的重定向。有两种方法可以做到这一点:

(1)所有帖子名称中都有破折号,但类别中没有破折号,因此两个示例都是这样的:

Options +FollowSymLinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^-]+)$ cats.php?cat_label=$1 [L,QSA]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ post.php?id_name=$1 [L,QSA]
(2)为类别添加一个目录,这样就不会出现任何可能导致错误的魔法角色内容。您已经遇到了上述可能性。下面是它的外观:

Options +FollowSymLinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^cats/(.*)$ cats.php?cat_label=$1 [L,QSA]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ post.php?id_name=$1 [L,QSA]

在这两种情况下,我们首先匹配更具体的版本,将它们标记为
[L]
ast。然后,我们在末尾有一个广泛的、全面的标记。

标志
[L]
表示“最后一个”,如中所示,当该规则匹配时,它是最后一个测试的重写规则。您需要一种方法来区分这两种类型的重定向。有两种方法可以做到这一点:

(1)所有帖子名称中都有破折号,但类别中没有破折号,因此两个示例都是这样的:

Options +FollowSymLinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^-]+)$ cats.php?cat_label=$1 [L,QSA]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ post.php?id_name=$1 [L,QSA]
(2)为类别添加一个目录,这样就不会出现任何可能导致错误的魔法角色内容。您已经遇到了上述可能性。下面是它的外观:

Options +FollowSymLinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^cats/(.*)$ cats.php?cat_label=$1 [L,QSA]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ post.php?id_name=$1 [L,QSA]
在这两种情况下,我们首先匹配更具体的版本,将它们标记为
[L]
ast。然后,我们有广泛的,catchall在最后