2011-12-26 64 views
1

我发现了一个类似于我的问题的问题(Regular Expression For URL Query),但无法让我的问题得到解决。URL重写的正则表达式

所以我在HTACCESS中正则表达式遇到问题。

因此,我在我的网站是:

ROOT:(我的Web根是在子文件夹中的网站')

/sites/index.php和其他文件

/网站/网站/ sample_folder_name/

现在我想的事是重写URL:

/网站/网站/ 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

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

回答

0

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

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

更重要的是,反转您的规则:你将不必使用L

而且,考虑使用<Location>指令,它会让你的工作更轻松:

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

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