如何编写多个.htaccess重写规则?

时间:2019-01-29 11:31:16

标签: php .htaccess mod-rewrite url-rewriting

我有多个php页,如下所示:

http://www.example.com/si/article.php?id=122&nTitle=my-title
http://www.example.com/si/post.php?id=352&pTitle=my-post-title

我想将它们重写为

http://www.example.com/si/122/my-title
http://www.example.com/si/352/my-post-title

我在.htaccess文件中尝试了其他操作,但没有结果。请告诉我如何使用多个规则。如果我在.htaccess文件中使用一条规则,则它对一个php页面的工作如下:

RewriteRule ^([\s\w-]+)/(.*)/?$ article.php?id=$1&nTitle=$2 [L,QSA,NC]

现在我尝试将其用于多个页面:

<ifModule mod_rewrite.c>
  Options -Indexes
  RewriteEngine on

  RewriteCond %(REQUEST_FILENAME) !-f
  RewriteCond %(REQUEST_FILENAME) !-d
  RewriteRule ^/([\s\w-]+)/(.*)$ /article.php?id=$1&pName=$2 [L,QSA,NC]

  RewriteCond %(REQUEST_FILENAME) !-f
  RewriteCond %(REQUEST_FILENAME) !-d
  RewriteRule ^/([\s\w-]+)/(.*)$ /post.php?id=$1&pName=$2 [L,QSA,NC]

</IfModule>

有人可以给我关于如何在.htaccess中使用此功能的建议吗?

谢谢。

2 个答案:

答案 0 :(得分:1)

您可以使用如下网址:(看起来彼此不同)

http://www.example.com/arical-si/122/my-title
http://www.example.com/post-si/352/my-post-title

然后重定向到:

<IfModule mod_rewrite.c>
RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/$0 
RewriteRule ^artical-si/([0-9+/=$]*)/([A-Za-z0-9+/=$]*)$ article.php?id=$1&nTitle=$2 [L]
RewriteRule ^post-si/([0-9+/=$]*)/([A-Za-z0-9+/=$]*)$ post.php?id=$1&nTitle=$2 [L]
</IfModule>

答案 1 :(得分:0)

首先,您应该测试您的正则表达式,您可以在regex generator

然后在您的htaccess中,您可以将正则表达式如下:

RewriteEngine on
RewriteRule ^/post.php?id=([0-9])&pName=([a-z]+)$    post/$1/$2  [L]
RewriteRule ^/article.php?id=([0-9])&pName=([a-z]+)$    article/$1/$2  [L]

逐步尝试,您可以轻松对其进行调试。