我不是htaccess专家。我很少用它来阻止狡猾的蜘蛛和删除index.php的基本CI路由。
但基本上,我正在尝试将所有网址请求转换为:
https://www.domain.tld/invoice/ [1个或更多整数] / [字母数字 字符串] .PDF
(例如https://www.domain.tld/invoice/674/9b3vpm3cy5nd8irm.pdf) 到
https://www.domain.tld/invoice/fetch/ [1个或更多整数] / [字母数字 字符串] .PDF
(例如https://www.domain.tld/invoice/fetch/674/9b3vpm3cy5nd8irm.pdf)
到目前为止,我已经 -
RewriteRule ^invoice/(.+)/(.+\.pdf)$ index.php?/invoice/fetch/$1 [L]
但它没有正常工作(毫不奇怪)并且对https://www.domain.tld/css/pdf.min.css
的请求进行了修改有人可以帮助正确构建这个重写规则吗?我意识到这可以通过CI路由轻松完成,但我需要在htaccess中完成,所以这条规则至关重要。
答案 0 :(得分:0)
重写斜杠/项目时没有简单的解决方案。不过,您有一个简单的解决方法:
使用绝对路径的所有资源文件:
<link href="/css/pdf.min.css" rel="stylesheet" type="text/css">
而不是,例如,
<link href="../css/pdf.min.css" rel="stylesheet" type="text/css">
这需要对PHP脚本或ASP.NET进行重新编程。
您可以随时测试:
RewriteEngine On
RewriteRule ^invoice/([^/]+)/(.+\.pdf)$ /index.php?/invoice/fetch/$1/$2 [L]
贪婪的正则表达式(。+)可能会导致一些问题。
答案 1 :(得分:0)
我发现了问题 - 下面另一个相互冲突的重写规则导致了问题。我进一步研究了正则表达式,并提出了这样的条件:
RewriteCond %{REQUEST_FILENAME} invoice/[0-9]+/[a-z0-9]+.pdf$
RewriteRule ^(.*)$ index.php?/invoice/fetch/$1 [L]
这似乎很棒!不过,我欢迎对此提出建议/改进/意见。