如果第一个反向引用($ 1)不是文件,则mod_rewrite默认为index.php

时间:2014-06-18 18:59:32

标签: .htaccess mod-rewrite

我尝试使用mod_rewrite读取网络应用程序的网址方案。

我正在使用URL中的目录结构使用一个或多个“变量”:

www.myWebApp.com/create/12345应改写为myWebApp.com/create.php?id=12345 www.myWebApp.com/share/12345应改写为myWebApp.com/share.php?id=12345

我使用

工作
RewriteRule ^(.*)/(.*) $1.php?id=$2 [NC,L]

但是,如果网址为simply www.myWebApp.com/12345,则重写规则必须知道第一个反向引用(12345)不是有效文件(12345.php不存在),因此它应将网址解释为index.php?id=12345

基本条件是检查第一个参数是否作为php文件存在。如果是,请提供此页面。如果有第二个参数,请将其用作“id”

以下是一些示例及其预期结果:

1. www.myWebApp.com/create(“create.php”存在)
=> www.myWebApp.com/create.php

2. www.myWebApp.com/create/MUymnF50x
=> www.myWebApp.com/create.php?ID = MUymnF50x`

3. www.myWebApp.com/create/MUymnF50x/F5jLKW0nJAc=
=> www.myWebApp.com/create.php?id=MUymnF50x&token=F5jLKW0nJAc =

如果第一个参数不作为php文件存在,只需提供“index.php”并将参数附加为“id”。

4. www.myWebApp.com/MUymnF50x ("MUymnF50x.php" does not exist)
    => www.myWebApp.com/index.php?id=MUymnF50x

5. www.myWebApp.com/MUymnF50x/F5jLKW0nJAc=
    => www.myWebApp.com/index.php?id=MUymnF50x&token=F5jLKW0nJAc =

1 个答案:

答案 0 :(得分:1)

您可以使用以下两条规则:

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ - [L]

RewriteCond %{DOCUMENT_ROOT}/$1\.php -f [NC]
RewriteRule ^([^/]+)/?$ $1.php [L,QSA]

RewriteCond %{DOCUMENT_ROOT}/$1\.php -f [NC]
RewriteRule ^([^/]+)/([^/]+)/?$ $1.php?id=$2 [L,QSA]

RewriteCond %{DOCUMENT_ROOT}/$1\.php -f [NC]
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/?$ $1.php?id=$2&token=$3 [L,QSA]

RewriteRule ^([^/]+)/?$ index.php?id=$1 [L,QSA]

RewriteRule ^([^/]+)/([^/]+)/?$ index.php?id=$1&token=$2 [L,QSA]