Php 设置.htaccess规则以指定不同的文件夹
如果我在url www.mydomain.com/compare.php中输入“public\u html”作为根目录,我想在.htaccess中设置一个规则,否则任何内容都会在url集合根目录中作为“public”文件夹出现Php 设置.htaccess规则以指定不同的文件夹,php,apache,.htaccess,Php,Apache,.htaccess,如果我在url www.mydomain.com/compare.php中输入“public\u html”作为根目录,我想在.htaccess中设置一个规则,否则任何内容都会在url集合根目录中作为“public”文件夹出现 RewriteRule ^(?!compare-source.php).*)$ public/$1 [L] 我想达到以下结果 如果url是www.mydomain.com/compare.php点击以下文件 public_html/compare.php public
RewriteRule ^(?!compare-source.php).*)$ public/$1 [L]
我想达到以下结果
如果url是www.mydomain.com/compare.php点击以下文件
public_html/compare.php
public_html/public/index.php
如果URL是www.mydomain.com/或www.mydomain.com/home等,点击以下文件
public_html/compare.php
public_html/public/index.php
我在正则表达式和这些apache规则方面都很弱:-(有人能给我一个描述良好的解决方案吗
欢迎您的回答,请您详细描述一下这些疯狂的事情是如何运作的。谢谢。试试:
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/public
RewriteRule ^((?!compare\.php).*)$ /public/$1 [L]
该指令启用或禁用运行时重写引擎
该指令定义了一个规则条件。以下规则仅在满足此条件时使用;在我们的例子中,如果请求URI(请求URL的路径组件)没有开始(因为!
)开始(因为^
)对于/public
。我们需要这个条件,因为我们不想重写已经重写的URL-这将导致循环和内部错误500
最后,将regex模式(^((?!compare\.php.*)$
)与主机名和端口后的URL部分匹配,且不带前导斜杠。如果模式匹配,则替换(public/$1
)将替换原始URL路径
在普通语言中,如果URL路径不是以compare.php
(因为?!
)开头,则在开头(^
)和结尾($
)之间选择所有内容(*
),并将其放入变量$1
),然后将原始URL路径替换为/public/$1
@阿努巴瓦的回答也是正确的,他只是把这两个条件都放在了重写规则中,而且它可以写得更具可读性:
RewriteCond %{REQUEST_URI} !^/public
RewriteCond %{REQUEST_URI} !^/compare\.php
RewriteRule ^(.*)$ /public/$1 [L]
您可以在站点根目录中使用此.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]
也许你可以对它的作用做更多的解释,以使它成为一个更完整的答案。@Dusan Bajic你的解决方案非常匹配,但如果你能描述它是如何工作的……Thankstorry没有看到你的答案-我的答案非常相似,所以我删除了它