2016-12-24 68 views
2

我想,如果我在URL输入www.mydomain.com/compare.php设置“的public_html”为根,否则任何事情都在URL中设置root身份设置在.htaccess规则'公共'文件夹。设置的.htaccess规则来指定不同的文件夹

RewriteRule ^(?!compare-source.php).*)$ public/$1 [L] 

我想达到以下效果。

if url is www.mydomain.com/compare.php点击下面的文件。

public_html/compare.php 

如果URL是www.mydomain.com/ OR www.mydomain.com/home等打以下文件。

public_html/public/index.php 

我在正则表达式,并在这些阿帕奇规则总是:-(能有人给我很好的说明解决弱?

你的答案是值得欢迎的,请你能形容这个疯狂的事情是如何工作的。详细感谢

回答

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路径。

在平实的语言,如果URL路径不与compare.php(因为?!)开始,开始挑(^)和结束($),并将其放置在变量$1之间的一切(.*)。然后用/public/$1替换原始的URL路径。

@ Anubhava的答案也是正确的,他只是放在重写规则这两个条件,并且还可以更可读书面:

RewriteCond %{REQUEST_URI} !^/public 
RewriteCond %{REQUEST_URI} !^/compare\.php 
RewriteRule ^(.*)$ /public/$1 [L] 
+1

也许你可以添加一些更多的解释,这是为了使这个更完整的答案。 –

+0

@Dusan Bajic你的解决方案是完美的搭配,但如果你可以描述它是如何工作的......谢谢 – zarpio

+0

当然,请参阅编辑。 –

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] 
相关问题