带有嵌套.htaccess文件的mod_rewrite

时间:2010-06-23 19:58:18

标签: regex apache .htaccess mod-rewrite

我已经在我的根目录中创建了.htaccess来创建子域级别,假设它是sub.domain.ex重定向到domain.ex/deb/

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是一个打印参数“app”的文件。 它有效,但只有当我调用http://sub.domain.ex/something/时(注意结尾处的斜线)。它只适用于最后的斜杠,如果我删除它,它不会,我希望它没有最后的斜线工作。

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


更新

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

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

/deb目录的.htacces中,并创建一个print_r($_GET);并调用index.php。因此,如果它在cydia sublvel的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吗?app = someText

现在我试着去subdomain.domain.com/deb.php....WTF !? deb.php位于/htdocs/deb/deb.php

家很清楚

4 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

我可能错了,但是在第二个.htaccess中你应该检查网址是否还没有用“/deb.php”重写

类似

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

答案 2 :(得分:0)

你应该重写规则

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

这是像Drupal这样的CMS中使用的常见模式

答案 3 :(得分:0)

我认为我的主人有某种解决方法。不可能。我尝试了所有类型的goo(用于regexcoach)来匹配正确的组,并且没有其他500错误apache。 使其工作的唯一方法是使用tu参数 使用此^app/([^/]+) /deb.php?app=$1并使用sub.domain.com/app/nameTest进行调用,这可以使用或不使用结束反斜杠。 你得到一些建议摆脱这个,请告诉我。 再见