我甚至不确定我是否正确地做这件事,所以我要在这里提出整个问题。
我有一个网站的url看起来像这样:
www.example.com/some-random-key/page.php
我像这样redirect:
RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*?)/(.*?)$ $2?key=$1
这大部分工作。 我的问题是以下两个url最终不等同:
www.example.com/my-key www.example.com/my-key/
第二个示例的行为如预期,redirect到index.php的根级别,并传递“my-key”作为参数。
第一个示例失败,找不到错误。
有没有办法添加一个规则,说if the file isnt found, then fetch index.php?key=$key或者我是从一个错误的angular度来处理?
你的问题基本上是正则expression式。 你试图匹配任何后面跟着斜线的东西,然后是任何东西。
你应该试试:
RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)/(.*)$ $2?key=$1 [R,L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} !^.*/$ RewriteRule ^(.*)$ ?key=$1 [R,L]
第一块是你的configuration,并且就像你需要的一样工作。 第二个只适用于没有结尾的斜线,这是你想要的。
唯一的缺点是,如果有人要求一个URL后没有相应的page.php(假设/some-key/nonexistant.php),它将被redirect到?key = nonexistant.php(don'不知道怎么称呼这个,function或bug:P)。
请求/?key=your-key的默认页面是您的DefaultIndex