GVKun编程网logo

禁止网址的 htaccess 重写规则(禁止网站运行javascript会怎样)

8

对于想了解禁止网址的htaccess重写规则的读者,本文将是一篇不可错过的文章,我们将详细介绍禁止网站运行javascript会怎样,并且为您提供关于$_GET中具有转义的&符号的php–htacce

对于想了解禁止网址的 htaccess 重写规则的读者,本文将是一篇不可错过的文章,我们将详细介绍禁止网站运行javascript会怎样,并且为您提供关于$_GET中具有转义的&符号的php – htaccess重写规则失败、.htaccess平面链接的重写规则、.htaccess文件中的重写规则不适用于子域到主域、.htaccess的多个重写规则,同时包含index.php的有价值信息。

本文目录一览:

禁止网址的 htaccess 重写规则(禁止网站运行javascript会怎样)

禁止网址的 htaccess 重写规则(禁止网站运行javascript会怎样)

如何解决禁止网址的 htaccess 重写规则?

我对 htaccess 重写并不陌生,但今天我看到了一个我以前从未见过的规则:

# Access block for folders
RewriteRule _(?:recycler|temp)_/ - [F]

此规则是 Typo3 htaccess 文件的一部分。

“?:”是什么意思?这是某种反向引用吗?下划线代表什么? 非常感谢!

解决方法

规则 RewriteRule _(?:recycler|temp)_/ - [F] 可以分为 2 条规则以便更好地理解。喜欢:

RewriteRule _recycler_/ - [F]

RewriteRule _temp_/ - [F]

现在让我们了解这意味着什么:

  • 您可以看到它是从 2 个规则中创建 1 个规则的快捷方法。
  • 我们可以使用正则表达式来匹配多个模式,并对落入相同条件(由正则表达式匹配)的 URI 执行相同类型的操作。
  • 在本例中,我们尝试匹配 _(文字字符)后跟 (?:recycler|temp)。其中 ?: 代表非捕获组。因此,此部分中的任何内容(?:.......) 都不会具有反向引用功能。它在正则表达式中基本匹配字符串/文本 recycler OR temp ,其前后是 _
  • 现在是捕获组:在 .htaccess 中,我们可以使用捕获匹配值的功能,我们可以稍后使用它们,例如--> $1 用于获取第一个捕获值(存储在内存中),我们可以说非捕获组告诉我们想要匹配一个正则表达式,但不要将它存储到内存中(因为我们不想稍后在我们的程序中使用它)。

以下是在 htaccess 规则中捕获组规则的示例:

RewriteEngine ON
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/$1.php -f [NC]
RewriteRule ^(first|second)/(.*)?$ $1.php?$2 [QSA,NC,L]

上面例子的解释: 它只是简单地制作了 2 个捕获组,第一个将有第一个或第二个捕获组,第二个捕获组将有任何东西(因为我们使用了 .* ),所以在重写部分时,我们使用 $1$2 来获取值。您可以清楚地看到,我们也可以在条件部分使用这些值(在后端变为:%{DOCUMENT_ROOT}/first.php OR %{DOCUMENT_ROOT}/second.php)。

以下是 htaccess 规则中非捕获组的示例:

RewriteEngine ON
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/$1.php -f [NC]
RewriteRule ^(?:first|second)/(third/fourth)/?$ $1.php [QSA,L]

上面例子的解释: 我们可以看到我们在规则端匹配 first OR second 所以现在 $1 的值将是这次是第三个或第四个,因为我们第一次/第二次使用了非捕获组。所以后端条件检查将变成:%{DOCUMENT_ROOT}/third.php OR %{DOCUMENT_ROOT/fourth.php

$_GET中具有转义的&符号的php – htaccess重写规则失败

$_GET中具有转义的&符号的php – htaccess重写规则失败

我遇到一个get参数与htaccess重写规则相结合的问题.
下面是urlencode()的链接;重写规则我用来重定向到index.PHP,最后是index.PHP上的一个print_r($_ GET).
您可以看到,urlescaped&符号不是变量static的值的一部分,而是与我的期望相反,被解释为变量分隔符.为什么?

初始链接:

<a href="static/Game-Tech-%26-Arts-Lab">link</a>

的.htaccess:

RewriteRule ^static/(.*)$/index.PHP?static=$1 [L]

index.PHP文件:

Array ( [static] => Game-Tech- [-Arts-Lab] => )
啊好吧.有趣.似乎有一个特殊的解决方案来保持&符号特别逃脱.使用 [B] flag for Rewriterules.
RewriteRule ^static/(.*)$/index.PHP?static=$1 [L,B]

当内插$1占位符时,这应该是urlencode特殊字符.它只适用于Apache 2.2,但我相信.

找到几个参考文献:

> http://www.dracos.co.uk/code/apache-rewrite-problem/
> mod_rewrite with question marks and ampersands (with PHP)
> http://www.mediawiki.org/wiki/Manual:Short_URL/Ampersand_solution

.htaccess平面链接的重写规则

.htaccess平面链接的重写规则

我是使用RewriteRule的新手,所以我可能会丢失一些明显的东西,但是我有一个PHP脚本,它可以像下面这样使用urlvariables:

{baseurl}properties.PHP?prop=Property-Name

我想创buildrewriteRules,以便任何在这个脚本名称/variables组合中input的人将其URL改写为:

{baseurl}/properties/Property-Name

以及确保任何谁在types的平面链接url,实际上调用正确的variables名称和值的脚本。

我一直在指这个链接 ,我发现相关的线程:

如何在使用Apache重写时隐藏URL更改?

Codeigniter删除Nginx上的index.PHP

Apache mod_rewrite:只有在不在localhost的情况下强制www

configurationhtaccess以绕过直接链接到CSS和Javascript文件

将.htaccess转换为web.config

Mod_rewrite平面链接

Mod_rewrite麻烦:想从?=直接链接到一个平面链接,似乎没有任何工作

但是,我显然做错了,因为我无法得到这个URL以我想要的方式工作。 我目前使用下面的代码,除了重写URL以包含www,以及将index.PHP的请求redirect到站点根目录之外,它似乎什么都不做

RewriteEngine ON RewriteCond %{HTTP_HOST} ^baseurl.com$ [NC] RewriteRule ^(.*)$ http://www.baseurl.com/$1 [R=301,L] RewriteRule ^index.PHP / [R=301,L] RewriteRule ^properties/([0-9A-Za-z]+)/$ /properties.PHP?prop=$1

这个问题显然是最后一个RewriteRule,假设没有任何影响。 再次,我可能做一些荒谬的事情。 有人能解释我在做什么错吗?

谢谢你的帮助。

CORS问题请求的资源上没有“Access-Control-Allow-Origin”标题

.htaccess文件扩展名卸妆代码打破网站forms

如何在.htaccess中设置代理

如何将htaccess的子域redirect写入https

CodeIgniter的htaccess子文件夹问题

匆匆一瞥,似乎你忘了在正则表达式中包含短划线,并且包含了尾部的斜线。 用这个代替:

RewriteRule ^properties/([0-9A-Za-z-]+)$ /properties.PHP?prop=$1

如果你看看你的规则^properties/([0-9A-Za-z]+)/$你会发现它需要以正斜杠结束。 你可以删除它,或者使其成为可选项,例如^properties/([0-9A-Za-z]+)/?$ 。

总结

以上是小编为你收集整理的.htaccess平面链接的重写规则全部内容。

如果觉得小编网站内容还不错,欢迎将小编网站推荐给好友。

.htaccess文件中的重写规则不适用于子域到主域

.htaccess文件中的重写规则不适用于子域到主域

RewriteCond %{HTTP_HOST} ^[citystate]\.example\.com
RewriteRule ^(.*)$ https://example\.com\/$1 [L]

此规则必须放在.htaccess文件的顶部,以避免与其他指令冲突。

但是,有两个潜在问题:

  • 正则表达式摘录[citystate]仅与字符类中的单个字符匹配。 []表示字符类。因此,这与citysta或{{1} }-仅一个字符。您需要按原样指定单词,没有方括号。但是,如果您有很多“城市”,那么这需要每个城市都有一条规则,您可以使正则表达式更通用,以匹配任何城市。例如。 e(即[a-z]+a范围内的1个或多个小写字母。)

  • 您缺少z上的Rredirect)标志。例如。 RewriteRule[R,L]。但是,由于您在目标URL上指定了方案+主机名,因此它将隐式触发302(临时)重定向-可以。但是,为了解决Bing的问题,它必须是301(永久)重定向。但是,请先使用302(临时)重定向进行测试,以避免潜在的缓存问题。

次要问题:

  • [R=301,L]-默认情况下,正则表达式是贪婪的,因此^(.*)$^(字符串的开始和结尾)锚是多余的。

  • $ 替换中不需要反斜杠转义文字点和斜线,因为这是一个“普通”字符串,而不是正则表达式。

请尝试以下操作:

RewriteRule

如果RewriteCond %{HTTP_HOST} ^[a-z]+\.example\.com RewriteRule (.*) https://example.com/$1 [R=301,L] 后向引用未正确捕获URL路径,则可以改用$1服务器变量。例如:

REQUEST_URI

请注意,RewriteCond %{HTTP_HOST} ^[a-z]+\.example\.com RewriteRule ^ https://example.com%{REQUEST_URI} [R=301,L] 服务器变量包含一个斜杠前缀,因此在 substitution 字符串中将其省略。

.htaccess的多个重写规则,同时包含index.php

.htaccess的多个重写规则,同时包含index.php

我发现这可行:

RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L] #if not already index.php

RewriteCond %{REQUEST_FILENAME} !-f #only if NOT a FILE (directory / non-existent file)
RewriteRule . /index.php [L] #redirect to index.php

RewriteCond %{HTTP_HOST} ^example.com$
RewriteRule ^(.*) https://www.example.com/%{REQUEST_FILENAME} [R=301,L] #redirect to https://www
</IfModule>

由于存在许多错误,因此这可能无法“正常工作”:

  • 您缺少开头<IfModule mod_rewrite.c>指令。但是,无论如何都不需要此<IfModule>包装器,应该将其删除。

  • Apache不支持行尾注释。具体来说,由于“错误的标志定界符”,以下行将导致500错误:

     RewriteCond %{REQUEST_FILENAME} !-f #only if NOT a FILE (directory / non-existent file)
    

    更新:如果在这里没有看到500错误响应,则可能是您在LiteSpeed服务器上;而不是Apache?在LiteSpeed上,此行尾注释似乎可以正常工作! )

  • 重定向到www的外部重定向(最后)永远不会处理目录请求(包括根目录)或实际文件(index.php除外)以外的任何事情。该重定向需要先进行,在现有重写之前。但是,请参阅下一点...

  • 您在目标URL中错误地使用了REQUEST_FILENAME(绝对文件系统路径)-这将导致格式错误的重定向。您可以改用REQUEST_URI服务器变量(完整的URL路径),但是请注意,您还存在双斜杠问题。因此,它需要像下面这样重写:

     RewriteRule ^ https://www.example.com%{REQUEST_URI} [R=301,L]
    

次要点:

  • RewriteBase不在此处使用,可以安全地删除。 (除非您还有其他使用此指令的指令?)

摘要

将以上几点结合在一起,我们就有:

RewriteEngine On

# Redirect to https://www
RewriteCond %{HTTP_HOST} ^example\.com$
RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

# Stop here if already index.php
RewriteRule ^index\.php$ - [L]

# Only if NOT a FILE (non-existent file)
RewriteCond %{REQUEST_FILENAME} !-f
# Rewrite to index.php (in the document root)
RewriteRule . /index.php [L]

请注意,这仍然会将目录重写为/index.php,这与您的注释所说的相反。

首先使用302(临时)重定向进行测试,以避免潜在的缓存问题。

在测试之前,您需要清除浏览器缓存。

,

经过大量的修补/研究,我发现这可行:

RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L] #if not already index.php

RewriteCond %{REQUEST_FILENAME} !-f #only if NOT a FILE (directory / non-existent file)
RewriteRule . /index.php [L] #redirect to index.php

RewriteCond %{HTTP_HOST} ^example.com$
RewriteRule ^(.*) https://www.example.com/%{REQUEST_FILENAME} [R=301,L] #redirect to https://www
</IfModule>

<IfModule mod_headers.c>
    Header set Access-Control-Allow-Origin "*"
</IfModule>

我们今天的关于禁止网址的 htaccess 重写规则禁止网站运行javascript会怎样的分享已经告一段落,感谢您的关注,如果您想了解更多关于$_GET中具有转义的&符号的php – htaccess重写规则失败、.htaccess平面链接的重写规则、.htaccess文件中的重写规则不适用于子域到主域、.htaccess的多个重写规则,同时包含index.php的相关信息,请在本站查询。

本文标签: