不使用域名的 RewriteRule

不使用域名的 RewriteRule

我目前使用RewriteRule将所有流量导向一个index.php文件,然后该文件决定要服务哪个页面。当前规则运行良好,如下所示:

RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR] 
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]

这意味着如果我访问以下 URL,将显示正确的页面:

http://www.mydomain.com/main/index/1/basic/0/0/date/14/0/0/20/0/0/0/0/0/0/0

我的问题:

我希望能够将链接添加/teaching-and-training/20到我的页面,该链接应重定向到上述 URL,即/main/index/1/basic/0/0/date/14/0/0/20/0/0/0/0/0/0/0

如果我使用以下命令可以使它工作RewriteRule

RewriteRule ^teaching-and-training/([0-9]+)$
http://www.mydomain.com/main/index/1/basic/0/0/date/14/0/0/$1/0/0/0/0/0/0/0 [L]

但如果我删除该部件,它就不起作用http://www.mydomain.com。我需要删除这个部件。

编辑:我说的“不起作用”是指重定向成功,但 URL 却变成了丑陋而冗长的 URL。我希望 URL 保持原样teaching-and-training/20

我怀疑问题是它main/index/1/basic/0/0/date/14/0/0/$1/0/0/0/0/0/0/0实际上并不存在(该index.php文件能够确定这是哪个页面),所以我的问题是:

有没有什么方法可以让我通过使用更多的魔法或者将其与 相结合来进行^teaching-and-training/([0-9]+)$显示?/main/index/1/basic/0/0/date/14/0/0/$1/0/0/0/0/0/0/0RewriteRuleindex.php RewriteRule

任何建议都值得赞赏。

谢谢!

答案1

如果你想teaching-and-training/([0-9]+)显示那个长 URL,那么你应该放置规则第一的(即文件顶部附近)并且不使用[L]。这样,mod_write将重写一次,然后再次当它符合您的正常规则时。[L]意思是“此规则是最后一条,如果匹配,则按照我刚刚重写的内容运行”,这与您想要的正好相反。

RewriteRule ^teaching-and-training/([0-9]+)$ /main/index/1/basic/0/0/date/14/0/0/$1/0/0/0/0/0/0/0

相关内容