对于想了解禁止网址的htaccess重写规则的读者,本文将是一篇不可错过的文章,我们将详细介绍禁止网站运行javascript会怎样,并且为您提供关于$_GET中具有转义的&符号的php–htacce
对于想了解禁止网址的 htaccess 重写规则的读者,本文将是一篇不可错过的文章,我们将详细介绍禁止网站运行javascript会怎样,并且为您提供关于$_GET中具有转义的&符号的php – htaccess重写规则失败、.htaccess平面链接的重写规则、.htaccess文件中的重写规则不适用于子域到主域、.htaccess的多个重写规则,同时包含index.php的有价值信息。
本文目录一览:- 禁止网址的 htaccess 重写规则(禁止网站运行javascript会怎样)
- $_GET中具有转义的&符号的php – htaccess重写规则失败
- .htaccess平面链接的重写规则
- .htaccess文件中的重写规则不适用于子域到主域
- .htaccess的多个重写规则,同时包含index.php
禁止网址的 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
ORtemp
,其前后是_
- 现在是捕获组:在 .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重写规则失败
下面是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平面链接的重写规则
我是使用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文件中的重写规则不适用于子域到主域
RewriteCond %{HTTP_HOST} ^[citystate]\.example\.com RewriteRule ^(.*)$ https://example\.com\/$1 [L]
此规则必须放在.htaccess
文件的顶部,以避免与其他指令冲突。
但是,有两个潜在问题:
-
正则表达式摘录
[citystate]
仅与字符类中的单个字符匹配。[
和]
表示字符类。因此,这与c
,i
,t
,y
,s
,t
,a
或{{1} }-仅一个字符。您需要按原样指定单词,没有方括号。但是,如果您有很多“城市”,那么这需要每个城市都有一条规则,您可以使正则表达式更通用,以匹配任何城市。例如。e
(即[a-z]+
至a
范围内的1个或多个小写字母。) -
您缺少
z
上的R
(redirect
)标志。例如。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
我发现这可行:
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的相关信息,请在本站查询。
本文标签: