我尝试使用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 =
答案 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]