开发者

mod_rewrite with nested .htaccess files

I have made an .htaccess to my root directory for creating a subdomain level, assume it is sub.domain.ex that redirect to domain.ex/deb/

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

and this works well.

Now, I go to /deb/ and create another .htaccess with the following

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

the deb.php is a file that prints the argument "app". It works but only if i call http://sub.domain.ex/something/ (note the slash at the end). It only works with a final slash, if I remove it, it doesn't and I want it to work without final slash.

So I change the rule into ^([^/]+) but now I have 500 Apache internal error. The regex coaches are by my side with the selection, maybe I'm missing something. Thanks


UPDATE

I'm runinng mad. Mybe is wro开发者_Go百科ng to put one .htaccess in the root for creating se 3th sublevel doman and the .htacces in the other directory? Because I'm ttrying some trick. I use this rule

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

in the .htacces of the /deb directory and made a print_r($_GET); and called index.php. So the redirectory doesn't work at all if it forward me on the index.php of the cydia sublvel and doesn't take the /deb/deb.php!!! Recap. my dir structure is this:

/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

So the .htaccess for the 3th level domain is the in /htdocs./htaccess and described as before. The other .htaccess for "beautify" the link is in the /htdocs/deb/.htaccess. I want that when you go to subdomain.domain.com/someText it transform to deb.php?app=someText

Now i tryed go to subdomain.domain.com/deb.php....WTF!? the deb.php is in /htdocs/deb/deb.php

Home is clear


This works fine for me, at least, assuming I understood everything you wanted.

In /htdocs/.htaccess:

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

In /htdocs/deb/.htaccess:

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

Edit: I updated the second file's contents to reflect your additional requests. You should remove the /? if you don't want them to be able to go to sub.domain.ex/something/ -> deb.php?app=something.


I could be wrong, but in the second .htaccess you should check that the url wasn't yet rewrited with "/deb.php"

So something like

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


You rewrite rule should be

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

That's a common pattern used in CMSs like Drupal


I think there is some kind of rescrctions to my host. It's impossible. I tried all kind of goo (for a regexcoach) for matching the correct group and there is nothing else the 500 error apache. The only way to get this to work is use tu parameters with this ^app/([^/]+) /deb.php?app=$1 and calling with sub.domain.com/app/nameTest and this is working with or without the end backslash. Of you get some advice for getting rid of this, please let me know. bye

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜