![不使用域名的 RewriteRule](https://linux22.com/image/797538/%E4%B8%8D%E4%BD%BF%E7%94%A8%E5%9F%9F%E5%90%8D%E7%9A%84%20RewriteRule.png)
我目前使用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/0
RewriteRule
index.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