我想在.htaccess中设置一个规则,如果我输入网址www.mydomain.com/compare.php set' public_html'作为root用户,否则任何内容都会在URL中设置为' public'夹。
var player: AVAudioPlayer?
let url = Bundle.main.url(forResource: "Sound/yatch", withExtension: "mp3")!
do {
player = try AVAudioPlayer(contentsOf: url)
guard let player = player else { return }
player.prepareToPlay()
player.play()
} catch let error {
print(error.localizedDescription)
}
我希望获得以下结果。
如果网址 www.mydomain.com/compare.php 点击以下文件。
RewriteRule ^(?!compare-source.php).*)$ public/$1 [L]
如果网址 www.mydomain.com / 或 www.mydomain.com/home 等,请点击以下文件。
public_html/compare.php
我在正则表达式中很弱,在这些apache规则中总是:-(有人可以给我一个描述良好的解决方案吗?
欢迎您的回答,请您详细说明这些疯狂的事情是如何运作的。感谢。
答案 0 :(得分:1)
尝试:
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/public
RewriteRule ^((?!compare\.php).*)$ /public/$1 [L]
RewriteEngine指令启用或禁用运行时重写引擎。
RewriteCond指令定义规则条件。以下规则仅在满足此条件时使用;在我们的示例中,如果REQUEST_URI(请求的URL的路径组件)没有(因为!
)开始(因为^
)/public
。我们需要这个条件,因为我们不想重写已经重写的URL - 这会导致循环和内部错误500.
最后,RewriteRule将匹配正则表达式模式(^((?!compare\.php).*)$
)与主机名和端口之后的部分URL匹配,并且没有前导斜杠。如果模式匹配,则替换(public/$1
)将替换原始URL路径。
简单来说,如果网址路径不以compare.php
开头(因为?!
),请选择开头(.*
)和结束之间的所有内容(^
) $
)并将其放在变量$1
中。然后将原始网址路径替换为/public/$1
。
@Anubhava的答案也是正确的,他只是在RewriteRule中放置了这两个条件,并且它可以写成更具可读性:
RewriteCond %{REQUEST_URI} !^/public
RewriteCond %{REQUEST_URI} !^/compare\.php
RewriteRule ^(.*)$ /public/$1 [L]
答案 1 :(得分:1)
您可以在站点根目录中使用此.htaccess:
RewriteEngine On
# route /home/ or /home to /
RewriteRule ^home/?$ / [L,NC]
# if not compare-source.php or public/* then route to /public/*
RewriteRule ^(?!public/|compare-source\.php$).*)$ public/$1 [L,NC]