我发现了一个与我的问题类似的问题(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.
请帮助......我在哪里做错了!
答案 0 :(得分:0)
您需要QSA
标志(查询字符串追加):
RewriteRule ^sites(/sites/[^/]+)/([^/]+)$ $1?siteredirect=$2 [QSA]
更重要的是,颠倒您的规则:您不必使用L
另外,考虑使用<Location>
指令,它将使您的工作更轻松:
<Location "/site/site">
#rules here
</Location>
<LocationMatch "^/site/(?!site/)">
#rules here
</Location>