htaccess删除URL前缀,检查文件是否存在,如果不发送到index.php

时间:2019-02-19 19:44:34

标签: php apache .htaccess

我在使用mod_rewrite时遇到了一些困难,这是我要完成的工作

  1. 删除以/ c / * /
  2. 开头的url前缀
  3. 删除前缀后,检查文件是否存在,如果存在,请使用它
  4. 如果文件不存在,请将请求发送到index.php

在我的情况下,/ c / TENANT_CODE /用于在多租户系统上标识我的租户。 TENANT_CODE将由一位客户更改为另一位客户。

示例:

访问静态图片

http://localhost/c/dev/img/someimage.png

在这种情况下,服务器上存在映像,因此我只想返回现有映像。我想将网址重写为http://localhost/img/someimage.png

访问路线

http://localhost/c/dev/some/route

在这种情况下,http://localhost/some/route不存在,因此我想将其发送到index.php主页面,以便laravel可以对其进行处理。

这是我到目前为止所拥有的,但是不起作用

RewriteCond %{REQUEST_URI} ^/c/([^/]*)(/.*)$
RewriteRule ^/c/([^/]*)(/.*)$ $2 [QSA,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php [QSA,L]

谢谢您的评论

1 个答案:

答案 0 :(得分:0)

您的第一个规则应该有效,但是您不需要该条件。

RewriteRule ^/c/([^/]*)(/.*)$ $2 [QSA,L]

其余请尝试使用SCRIPT_FILENAME

RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule .* index.php [QSA,L]