正则表达式匹配整个自定义查询字符串

时间:2014-03-30 05:02:01

标签: regex .htaccess mod-rewrite

我的网络应用程序的网址采用以下形式:

/cms/welcome
/cms/system-admin/groups
/cms/system-admin/standard-lists/accounting/COA
....
....

我正在尝试找到一个正则表达式,将其转换为:

/cms/index.php?content=welcome
/cms/index.php?content=system-admin/groups
/cms/index.php?content=system-admin/standard-lists/accounting/COA
....
....

我在下面尝试了这个但是没有给出'在此服务器上找不到请求的网址 / cms / welcome / ','请求的网址 / cms / system-admin /在此服务器等上找不到组

RewriteEngine On
RewriteBase /cms
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^([^/]+)/?$ index.php?content=$1 [L]

我的假设是: ^([^ /] +)/?$ 应匹配 / cms / 之后的任何内容并将其存储在 $ 1 。 任何帮助将不胜感激。 以下重写也失败了: RewriteRule ^(。*)$ index.php?page = $ 1

RewriteRule ^ /?([A-Za-z0-9 - /] +)/?$ index.php?page = $ 1 [QSA,L]

2 个答案:

答案 0 :(得分:0)

这是正则表达式:

(/cms/)(.*)

并将其替换为:

$1index.php?content=$2

我对PHP或htaccess一无所知,但我认为这应该有效:

RewriteEngine On
RewriteBase /cms
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule (/cms/)(.*) $1index.php?content=$2 [L]

答案 1 :(得分:0)

# Turn on rewriting
RewriteEngine On
# Starting with /cms
RewriteBase /cms
# If there's no file that matches the request
RewriteCond %{REQUEST_FILENAME} !-f
# *nor* a directory
RewriteCond %{REQUEST_FILENAME} !-d
# Then rewrite retaining any parameters [QSA] and stop [L]
RewriteRule ^(.*)$ index.php?content=$1 [L,QSA]

你能发现你做错了吗?

  

检查RewriteCond指令

需要另一个提示吗?

  

你的第二个RewriteCond说:只有在请求存在文件系统目录 时才重写;有个 '!'丢失。