我正在尝试使用.htaccess将某个子路径的所有url请求(“URL / somefolders / main / ..”)重定向到名为“_index.php”的一个基本文件。所以我将以下.htaccess实现到“文件夹” URL / somefolders / main / :
Dim ValBeforeChange as String
Private Sub Worksheet_SelectionChange(ByVal Target as Range)
ValBeforeChange = Target.Value
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
Application.ScreenUpdating = False
If Not Len(ValBeforeChange) > 0 Then Exit Sub
If Target.Value = ValBeforeChange Then Exit Sub
Dim KeyCells As Range
Set KeyCells = Range("A:A")
If Application.Intersect(KeyCells, Target) Is Nothing Then Exit Sub
Highlight Target
End Sub
Sub Highlight(ByRef Target as Range)
With Target.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 255
.TintAndShade = 0
.PatternTintAndShade = 0
End With
End Sub
重定向适用于所有不存在的文件,但如果文件存在,则调用它而不重定向。我想这是因为我命令“!”这样做。在RewriteCond中,但我所有尝试改变它都失败了。
如何更改上述代码以重定向所有文件(是否存在)?
修改
我的所有尝试仍然无效或错误。 后者带有Apache日志错误:
<IfModule mod_rewrite.c>
DirectoryIndex index.php
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^?]*)$ /main/_index.php?oldpath=$1 [NC,L,QSA]
</IfModule>
目前我担心事实上我在之前的大部分尝试中都正确地允许了不存在的文件,但由于包含文件而导致我无限循环的问题 - 这可能吗?如果是这样,.htaccess可以区分“内部”和“外部”文件请求吗?
答案 0 :(得分:1)
您的原始规则是您将看到的最常见的实现,其中REQUEST_FILENAME
检查现有文件或目录,以防止重写CSS和图像等内容。但那不是你想要的。
因此,您正确地尝试删除RewriteCond
指令,但结果是无限重写循环。这可能是因为后续的RewriteRule
也试图将_index.php
重写回自身。
您可以通过添加与RewriteCond
特别匹配的_index.php
来解决此问题,以防止其自行循环。
<IfModule mod_rewrite.c>
DirectoryIndex index.php
RewriteEngine on
# Don't apply the rewrite to _index.php to prevent looping
RewriteCond %{REQUEST_URI} !main/_index\.php
RewriteRule ^([^?]*)$ /main/_index.php?oldpath=$1 [NC,L,QSA]
</IfModule>
我还将简化RewriteRule
中的匹配组。 ([^?]*)
会捕获第一个?
之前的所有内容,但RewriteRule
收到的表达式绝不会包含查询字符串或?
。您可以简单地使用(.*)
来捕获存在的任何内容。
RewriteRule (.*) /main/_index.php?oldpath=$1 [NC,L,QSA]