如何在htaccess文件中添加/忽略子文件夹?

时间:2019-05-19 12:51:44

标签: apache .htaccess mod-rewrite url-rewriting

我已经在http://url/sdf19/构建了一个应用

我在/ sdf19 /中放置了一个.htaccess文件,其中包含RewriteRule以获取干净的URL。

但是我建立了一个PDF生成工具,该工具位于子文件夹/inc/tools中。 我需要直接链接到标头之前运行。

尽管进行了数小时的搜索,尝试使用摘要,生成器等,但在没有现有RewriteRule集接管的情况下,我无法收到对http://url/sdf19/inc/tools的任何请求

这是我的起始文件

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^([a-z]+)\/?$ index.php?page=$1 [NC]
RewriteRule ^([a-z]+)\/([0-9]+)\/?$ index.php?page=$1&id=$2 [NC]
RewriteRule ^([a-z]+)\/([a-z]+)\/?$ index.php?page=$1&action=$2 [NC]
RewriteRule ^([a-z]+)\/([a-z]+)\/([0-9]+)\/?$ index.php?page=$1&action=$2&id=$3 [NC]

我尝试将其添加到第4行; RewriteCond %{REQUEST_URI} !^ inc/tools/ [NC] 这给了RewriteCond:错误的参数行错误

我尝试将其添加到第2行;

RewriteCond %{REQUEST_URI} ^/inc/tools/(.*)$
RewriteRule ^.*$ - [L]

期望的结果是,我可以允许直接访问http://url/sdf19/inc/tools>到目前为止我尝试过的所有内容都重定向到基础http://url/sdf19/

1 个答案:

答案 0 :(得分:1)

也许,我们可以逐步解决此问题。第一步,我们可能只想使某些事情在可能的范围内减少。

让我们设计一个low boundary expression,也许类似于:

(.+)(\/inc\/tools)

从这里,我们可以仅将\/inc\/tools添加到RewriteCond中,以进行测试。稍后,我们可以对其进行修改。


RegEx

如果这不是所需的表达式,则可以在regex101.com中修改/更改表达式。

RegEx电路

您还可以在jex.im中可视化您的表达式:

enter image description here

RewriteRule测试

您可以在htaccess.madewithlove.be中测试RewriteRules。

我不太确定其余的RewriteRules,但是我假设它们工作正常并且与新的规则不冲突。也许,这或类似的东西会起作用:

<IfModule mod_rewrite.c>
    RewriteEngine On

    RewriteCond %{REQUEST_URI} \/inc\/tools  [NC]
    RewriteRule ^(.*)$ $1 [L]


    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d

    RewriteRule ^([a-z]+)\/?$ index.php?page=$1 [NC]
    RewriteRule ^([a-z]+)\/([0-9]+)\/?$ index.php?page=$1&id=$2 [NC]
    RewriteRule ^([a-z]+)\/([a-z]+)\/?$ index.php?page=$1&action=$2 [NC]
    RewriteRule ^([a-z]+)\/([a-z]+)\/([0-9]+)\/?$ index.php?page=$1&action=$2&id=$3 [NC]

</IfModule>