2010-06-23 38 views
2

我做了一个.htaccess到我的根目录下创建一个子级嵌套的.htaccess文件,假设它是sub.domain.ex重定向到domain.ex/deb/mod_rewrite的与

RewriteEngine On 
RewriteBase/
RewriteCond %{HTTP_HOST} sub.domain.ex 
RewriteCond %{REQUEST_URI} !deb/ 
RewriteRule ^(.*)$ /deb/$1 [L] 

,这工作得很好。

现在,我去/deb/并创建另一个.htaccess具有以下

RewriteEngine on 
RewriteRule ^([^/]+)/ /deb.php?app=$1 [NC] 

的deb.php是打印参数“应用程序”的文件。 它的工作原理,但只有当我打电话http://sub.domain.ex/something/(注意最后的斜线)。它只适用于最后的斜杠,如果我删除它,它不会,我希望它没有最后的斜线工作。

因此,我将规则更改为^([^/]+),但现在我有500个Apache内部错误。 正则表达式教练在我的身边与选择,也许我失去了一些东西。 感谢


UPDATE

我runinng疯了。 Mybe将一个.htaccess放在根目录下是错误的,因为它在另一个目录中创建了第3个sublevel doman和.htacces?因为我正在尝试一些技巧。 我用这个规则

RewriteEngine on 
RewriteRule ^([^/]+)/ deb.php?app=$1 [NC] 

/deb目录的.htacces,并提出了print_r($_GET);和名为index.php的。所以如果它在cydia子层的index.php上转发我,并且不使用/deb/deb.php,那么这个redirectory根本不起作用。 重述。 我的目录结构是这样的:

/htdocs/ -> the root of the main domain level like www.example.com 
---index.php -> home file of www.example.com 

/htdocs/deb -> the root directory of the 3th sublevel domain (subdomain.example.com -> 
---index.php 
---deb.php 

所以对于这是第3级域的.htaccess是之前在/htdocs./htaccess和描述。 “美化”链接的其他.htaccess位于/htdocs/deb/.htaccess中。我想,当你去subdomain.domain.com/someText其转换为deb.php?应用= someText

现在我tryed去subdomain.domain.com/deb.php....WTF!?该deb.php是/htdocs/deb/deb.php

首页清晰

回答

0

我可能是错的,但在第二次的.htaccess你应该检查网址尚未与rewrited“ /deb.php”

因此,像

RewriteCond %{REQUEST_URI} !deb\.php 
RewriteRule ^([^/]+) /deb.php?app=$1 [NC] 
+0

谢谢,但这是不可能的。重定向网址是好的,因为如果我呼叫站点sub.domain.ex/testname,它会回显/deb/deb.php上的php文件的内容 如果只是回显$ _GET ['app']值,只是为了测试。所以问题,即其他地方,我认为在rgeex,但我不知道 – Kreker 2010-06-23 20:35:52

0

你重写规则应该是

RewriteRule ^(.*)$ deb.php?app=$1 [L,QSA] 

这是一个常见的模式,用于像Drupal这样的CMS

+0

也没有工作:(或。我已经尝试与regcoach和你的它选择我所有的字母输入 – Kreker 2010-06-23 20:48:07

+0

这导致500阿帕奇内部错误现在 – Kreker 2010-06-23 20:49:52

2

这对我来说很好,至少假设我理解了你想要的一切。

/htdocs/.htaccess

RewriteEngine On 
RewriteCond %{HTTP_HOST} =sub.domain.ex 
RewriteCond %{REQUEST_URI} !^deb/ 
RewriteRule ^(.*)$ /deb/$1 

/htdocs/deb/.htaccess

RewriteEngine On 
RewriteBase /deb/ 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^([^/]+)/?$ deb.php?app=$1 
RewriteRule !^deb.php index.php 

编辑:我更新了第二个文件的内容,以反映您额外的请求。如果你不希望他们能够去sub.domain.ex/something/ -> deb.php?app=something,你应该删除/?

+0

好吧,这是行之有效的,但我有可能调用像许多参数,如subdomain.domain.com/test1/test2/等 这是可能的,只有一个参数没有最后的斜线只能阻止? – Kreker 2010-06-23 22:17:04

+0

你想让test1/test2 /根据你所拥有的文件和他们的查询字符串指向什么? – 2010-06-23 22:21:37

+0

你的解决方案还有另一个问题。当我打印$ _GET Array([app] => deb。 php) 而且它不是我们通过的参数 – Kreker 2010-06-23 22:27:26

0

我认为我的主机有一些类型的折扣。不可能。我尝试了所有类型的goo(用于regexcoach)来匹配正确的组,并且没有其他的500错误apache。 要使它正常工作的唯一方法是使用tu参数 与^app/([^/]+) /deb.php?app=$1,并使用sub.domain.com/app/nameTest调用,并且这可以使用或不使用结束反斜杠。 你得到一些建议,摆脱这一点,请让我知道。 bye