URL重写的正则表达式

时间:2011-12-26 09:39:15

标签: php regex .htaccess url-rewriting

我发现了一个与我的问题类似的问题(Regular Expression For URL Query),但无法解决我的问题。

所以我在HTACCESS中使用正则表达式时遇到了麻烦。

所以我在网站上的内容是:

ROOT :(我的网络根位于子网站'网站')

/sites/index.php和其他文件

/位点/位点/的 sample_folder_name /

现在我想做的是重写网址:

/位点/位点/的 sample_folder_name / file_name.php

到:

/位点/的 file_name.php ?siteredirect = sample_folder_name

记住: 如果URL包含任何请求参数,那么这些参数也必须重新编写,即:

示例:

/位点/位点/的 sample_folder_name / file_name.php CAT_ID = 1&安培;用户= 2

到:

/位点/的 file_name.php CAT_ID = 1&安培;用户= 2及siteredirect = sample_folder_name

参数应该是未知的而不是user和cat_id。它可以是任何参数。意味着在.php之后编写的任何内容也应该包含在URL中。

意思是:

/位点/位点/的 sample_folder_name / file_name.php ?if_any_parameters

然后:

/位点/的 file_name.php if_any_parameters&安培; siteredirect = sample_folder_name

否则:

/位点/的 file_name.php ?siteredirect = sample_folder_name

目前,重写效果很好,但我无法使用参数。

我现在在HTACCESS中拥有的内容:

RewriteRule ^sites\/([0-9A-Za-z_]+)\/([0-9A-Za-z_]+)\.php(.*)$ $2.php(?(?=$3)$3&)siteredirect=$1 [L]
RewriteRule ^sites\/([0-9A-Za-z_]+)\/$ index.php?siteredirect=$1 [L]

在此之后,它给了我一个404.

请帮助......我在哪里做错了!

1 个答案:

答案 0 :(得分:0)

您需要QSA标志(查询字符串追加):

RewriteRule ^sites(/sites/[^/]+)/([^/]+)$ $1?siteredirect=$2 [QSA]

更重要的是,颠倒您的规则:您不必使用L

另外,考虑使用<Location>指令,它将使您的工作更轻松:

<Location "/site/site">
    #rules here
</Location>

<LocationMatch "^/site/(?!site/)">
    #rules here
</Location>