views:

35

answers:

2

Hi

I'm lost here. I'm using this script to give users the opportunity to enter their username lijke this:domain/username

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^([^/]+)/?$ userpage.php?user=$1 [NC,L]
</IfModule>

This works fine. However, every user has pages I must link to: Video, Music, Images etc...

So I need something like:

domain/username/video

In php code it must be something like:

user.php?user=test&page=video

And one other question: What is the preferable way to link in this situation?

userpage.php?user=test&page=video

or

/test/video

And finally: Is it possible to deny the possibility to enter the url: domain/userpage.php?user=test&page=video? Instead just always show: domain/test/video

Thanks in advance

+1  A: 

Yes, it is possible by looking at the request line:

RewriteCond %{THE_REQUEST} ^[A-Z]+\ /userpage\.php[?\ ]
RewriteRule ^userpage\.php$ - [F]

This is necessary as the URL path could already be rewritten by another rule and thus using just RewriteRule would match those already rewritten requests too.

Gumbo
I'm doing something wrong, because a 404 error keeps showing up. And thanks for the answer. :)
moonwalker
@moonwalker: Where do you want to use that rule?
Gumbo
@Gumbo: At this moment I'm trying to get everything to work on my local server. So: http://localhost/
moonwalker
@moonwalker: Yes, but in what [context](http://httpd.apache.org/docs/2.2/mod/directive-dict.html#Context)? Server/virtual host configuration or an .htaccess file?
Gumbo
Oh sorry. No just an .htaccess file.
moonwalker
@moonwalker: And you’re sure you’re getting a 404 and not a 403?
Gumbo
@Gumbo: Yes. Do I have to change something in the code you have provided?
moonwalker
@moonwalker: No, the *F* flag should handle that. Um, did you also use the obligatory `RewriteEngine on`?
Gumbo
This is how the code looks like:[code]RewriteEngine OnRewriteBase /RewriteCond %{REQUEST_FILENAME} !-fRewriteCond %{REQUEST_FILENAME} !-dRewriteCond %{THE_REQUEST} ^[A-Z]+\ /userpage\.php[?\ ]RewriteRule ^userpage\.php$ - [F][/code]
moonwalker
A: 

I'm not 100% sure what you're asking? Do you need to change the rewrite rule to match the URL site.com/moonwalker/videos? You could try this:

RewriteRule ^([^/]+)/(images|videos|music)/?$ userpage.php?user=$1&page=$2 [NC,L]

Update Just a quick note on the domain/member/videos URL structure. That could end up causing you problems in the future. For instance what if you decide to have a single page that shows all member videos? You'd probably want to URL to look something like site.com/members/videos. That's a problem, because the rewrite rule will also match that, but "members" isn't a member username.

I would probably structure my member page URLs like site.com/user/moonwalker/videos so it doesn't clash with future rewrite rules. You would change the above rewrite rule to this:

RewriteRule ^user/([^/]+)/(images|videos|music)/?$ userpage.php?user=$1&page=$2 [NC,L]

Then later on you can add a rewrite rule like:

RewriteRule ^members/(images|videos|music)/?$ allusers.php?page=$1 [NC,L]

To show all member videos.

mellowsoon
moonwalker
Does the 404 error show which page is not found? i.e. "404 - userpage.php not found"
mellowsoon
This is the complete error:The requested URL /moonwalker/video was not found on this server.
moonwalker
The rewrite rule above uses "videos". Not "video".
mellowsoon
@mellowsoon: lol..Thank you very much! My bad. Now it works fine.Thank you!
moonwalker
Glad I could help. I updated my answer with a quick tip.
mellowsoon