Bra*_*van 5 mod-rewrite rewrite .htaccess
我已经在以下位置构建了一个应用程序http://url/sdf19/
我在 /sdf19/ 中放置了一个 .htaccess ,其中包含用于干净网址的 RewriteRule 。
但我已经构建了一个PDF生成工具,它位于子文件夹中/inc/tools
。我需要直接链接到它才能在标题之前运行。
尽管进行了几个小时的搜索、尝试片段、生成器等,但http://url/sdf19/inc/tools
如果现有的 RewriteRule 集不接管,我无法获得任何请求被允许
这是我的起始文件
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]
Run Code Online (Sandbox Code Playgroud)
尝试过的事情:
我尝试将其添加到第 4 行;
RewriteCond %{REQUEST_URI} !^ inc/tools/ [NC]
这给出了 RewriteCond: bad argument line 错误
我尝试将其添加到第 2 行;
RewriteCond %{REQUEST_URI} ^/inc/tools/(.*)$
RewriteRule ^.*$ - [L]
Run Code Online (Sandbox Code Playgroud)
我尝试在/inc/tools
RewriteEngine 关闭的情况下添加 .htaccess,但没有成功。
我尝试了顶帖上链接的 .htaccess 测试器,但是虽然我的文件(上面)可以在 IRL 中工作,但它会为那里的所有内容生成“未满足规则”!
长话短说
期望的结果是我可以允许直接访问http://url/sdf19/inc/tools
>到目前为止我尝试过的所有内容,我被重定向到基地http://url/sdf19/
关于您当前规则的一些讨论......
我尝试将其添加到第 4 行;
RewriteCond %{REQUEST_URI} !^ inc/tools/ [NC]
这给出了 RewriteCond: bad argument line 错误
因为CondPattern中间有一个错误的空格。但是,该表达式仍然不会给出正确的结果(见下文)。 !^ inc/tools/
我尝试将其添加到第 2 行;
Run Code Online (Sandbox Code Playgroud)RewriteCond %{REQUEST_URI} ^/inc/tools/(.*)$ RewriteRule ^.*$ - [L]
你对此很接近。但是,REQUEST_URI
服务器变量包含完整的 URL 路径,而不是相对于文件所在位置的 URL 路径.htaccess
。因此,这需要采用以下形式:
RewriteCond %{REQUEST_URI} ^/sdf19/inc/tools/
RewriteRule ^ - [L]
Run Code Online (Sandbox Code Playgroud)
这需要位于文件顶部附近.htaccess
,紧接在RewriteEngine On
指令之后。CondPattern末尾(.*)$
的是多余的,模式也是多余的。然而,这可以更有效地编写为单个指令并使用模式进行测试。然后您可以省略该子目录。例如:RewriteRule
^.*$
RewriteRule
/sdf19
RewriteRule ^inc/tools/ - [L]
Run Code Online (Sandbox Code Playgroud)
我尝试
.htaccess
在/inc/tool
s中添加 aRewriteEngine OFF
,但没有成功。
嗯,那应该有效。(除非您的父.htaccess
文件中的 mod_alias 指令可能存在冲突?)因此,鉴于您在问题中所说的为什么不冲突,目前还不清楚。您的.htaccess
文件中还有其他指令吗?
到目前为止我尝试过的所有操作都被重定向到基地
http://url/sdf19/
这也很奇怪,因为到目前为止您所显示的任何内容都不会导致外部重定向。您的.htaccess
文件中还有其他指令吗?也许是 mod_aliasRedirect
或指令?RedirectMatch
Run Code Online (Sandbox Code Playgroud)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]
这些指令的一个潜在问题是RewriteCond
指令仅适用于后面的第一个 RewriteRule
指令。因此,上面的第二条、第三条和第四RewriteRule
条指令将被无条件执行,并解释了为什么请求被第三条/sdf19/inc/tools
规则捕获。
您需要在每个 RewriteRule
之前包含相同的条件(即,仅当请求未映射到文件且未映射到目录时才处理规则)。或者,如果请求文件或目录,则否定它们的含义并阻止进一步处理 - 但是,这可能取决于文件中稍后是否有更多指令在这些条件下仍需要处理。
您还缺少L
这些指令的标志,因此处理(不必要?)继续通过您的文件。
因此,请尝试以下操作:
# Prevent further processing if a file or directory is requested
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
# Route other URLs
RewriteRule ^([a-z]+)\/?$ index.php?page=$1 [NC,L]
RewriteRule ^([a-z]+)\/([0-9]+)\/?$ index.php?page=$1&id=$2 [NC,L]
RewriteRule ^([a-z]+)\/([a-z]+)\/?$ index.php?page=$1&action=$2 [NC,L]
RewriteRule ^([a-z]+)\/([a-z]+)\/([0-9]+)\/?$ index.php?page=$1&action=$2&id=$3 [NC,L]
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4995 次 |
最近记录: |