与pdf目录的htaccess重写规则混淆

时间:2013-12-01 19:42:32

标签: .htaccess mod-rewrite url-rewriting

我不是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中完成,所以这条规则至关重要。

2 个答案:

答案 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]

这似乎很棒!不过,我欢迎对此提出建议/改进/意见。