2016-07-06 55 views
0

我有真正的很多关于CakePHP的,和PHP rewrite_mod,但读音字这么多关于如何使用它,因为我没有关于正则表达式的知识迷惑。 我怎么能有这样的事情?PHP假网址,复杂的.htaccess rewrite_mod

mywebsite.com/ /=> mywebsite.com/ ?郎= EN

mywebsite.com/ /约=> mywebsite.com/about/ ?郎= EN

mywebsite.com/ EN /搜索/?查询= +你好世界=> mywebsite.com/search/ ?查询= +你好世界& LANG = EN

所以在现实中我的文件是这样的:

public_html/about/index.php 
public_html/search/index.php 
public_html/index.php 

但即时作假就像

public_html/en/about/index.php 
public_html/en/search/index.php 
public_html/en/index.php 

,需要保护的URL,并通过GET传递的参数,我不明白怎么在.htaccess中设置一个如此复杂的url控制器

我也尝试了下面这个,但没有出去,有没有任何示例项目? cakephp 3 parameter url

回答

0

本质上,您重新排列了请求URL。这意味着,您必须分别捕获(...)零件,并将它们放在替代品$...中。您还希望保留现有的查询字符串,该字符串需要使用QSA|qsappend标志。 RewriteCond是为了防止重写循环。如果规则应用一次,则不应再次使用该规则。

RewriteCond %{QUERY_STRING} !lang= 
RewriteRule ^(..)(.*)$ $2?lang=$1 [L,QSA] 

要了解有关正则表达式的更多信息,请参阅Apache - Regular Expressions

+0

我不知道为什么QSA的服务器printss错误500,并且它继续重定向到** HIDDEN **目标'RewriteEngine on RewriteRule^lang - (。* +)/?$ index.php?lang = $ 1 [L]',这条线我得到了一点点附近,但即时通讯仍然远离页面的网址。对于类似'/ lang-EN/aboutus /?article = 0'这样的链接,var_dumps'array(1){[“lang”] => string(11)“EN/aboutus /”}';而如果不是?我使用&var_dumps'array(2){[“lang”] => string(11)“EN/aboutus /”[“article”] => string(1)“0”}'现在我必须能够从$ _GET ['lang']提取aboutus并将其放在index.php – development

+0

的地方对不起,这是我的错,我错过了检查重写循环。请参阅最新的答案。 –