A little bit help in url rewriting, please! - url

I have a short question about url rewriting...
I have a website. Let's say http://www.example.com/
with some subsites:
http://www.example.com/a.php
http://www.example.com/b.php
etc...
and some "special" urls like
http://www.example.com/c.php?i=1#link1
http://www.example.com/c.php?i=1#link2
http://www.example.com/c.php?i=2#link1
Now I would like to write a .htaccess file to convert current urls into rewritten urls like
http://www.example.com/a/
http://www.example.com/c/1/#link1
I'm not an expert in url rewriting, so could somebody please help me?
Best reagards.

RewriteRule ^a$ a.php [L]
RewriteRule ^c/(.*)/(.*) c.php?i=$1$2

Options +FollowSymLinks
Options +Indexes
RewriteEngine On
RewriteBase /
RewriteRule ^a.php a/
RewriteRule ^b.php b/
Should work as far as your static pages go, you can not rewrite the hash because the hash is not sent to the server (as discussed here). If you need to rewrite the hash I would suggest changing the hash to another GET variable (eg u), in that case just add this to your htaccess: RewriteRule ^c.php?i=(.*)&u=(.*) c/$1/$2. If you simply intend to leave the anchor though, you can omit it from your rewrite and everything should be fine (...becuase the server never sees the hash/pound symbol), and in that case you should add this to your code RewriteRule ^c.php?i=(.*) c/$1/.

Related

wildcard_charcters.sitename routing issues

i would like to incorporate wildcard characters to my site. so previously it was
www.mysite.com/user/mike or www.mysite.com/user/dave will look like
mike.mysite.com or dave.mysite.com. i tried .htacces rewriting but those were of rewriting for sub-domains and it was creating problems with css and images.I just want that too call user function with value we pass.I use RoR MVC framework.(i'm sure .htacces solve this issue but i don't know if we can give wildcards in routes too).
and i would like to keep other links normal like www.mysite/project/dashboard or www.mysite/project/messages.
Thanks in advance.
edit
i tried this but it dosent work, it's goes to site5s default page.
Options +FollowSymLinks
RewriteEngine On
RewriteCond ^(.*)$.example.com [NC]
RewriteRule ^(.*)$ http://example.com/user/$1 [R=301,L]'
ok, finnaly i was able to do it,there will be few things which you have to do first.
paste this code in .htaccess first of all.
Options +FollowSymLinks
RewriteEngine On
// enable rewriting
RewriteCond %{HTTP_HOST} ^(.+)\.example\.com$ // Check for wildcard character before example.com
RewriteCond %1 !=www // check if www is not present in URL
RewriteRule ^(.*)$ http://www.example.com/user/%1/$1 [R=302,L] // Redirect URL and replace matched wildcard character "^(.+)" in place of "$1"
Now we have defined the rules for that, now it's turn of redirection. above code won't be able to work.
for that you have to create a wildcard sub domain in from your Cpanle. Create a sub domain *.example.com and point to your public_html(you subsite if t\redirected site is a child site)

Regarding profile url shorten

I am wondering to know about this is it possible or not. If yes then please help me.
I want to change this URL:
http://domain.com/profile/admin
to
http://domain.com/admin
Where admin is username of profile user.
Why I am thinking it is impossible like the URL is already rewritten in .htaccess or somewhere.
You provide a little to less context to give a definitive answer but it must certainly be possible. It all depends on how you have setup your code and webserver now and in what degree you are allowed to modify any of them.
You can use below snippet in your .htaccess file -
<IfModule mod_rewrite.c>
RewriteEngine on
RedirectMatch 302 ^/$ /admin
RewriteRule ^/profile (.*) $1 [R=301,L]
</IfModule>
This snippet won't work if the URL- http://domain.com/profile/admin is auto-generated in between the application.

don't display .php extension in address bar(php)

First of all this method clearly working on github, for example pages showing done:
https://github.com/account
https://github.com/inbox
There is no .php extension at all + not needed ?page=account or ?page=inbox
In my opinion it's done via .htaccess.
Maybe someone knows how it should look in order to archieve same effect like github site ?
This can be achieved using mod_rewrite for apache
You put a .htaccess file in your document root and give it rules (Regular Expressions) to match the called URLs with
It looks similar to this:
RewriteEngine On
# rule to call MyPage.php if you call the URL http://yourdomain.com/MyPage
RewriteRule ^(.*)$ $1.php
# rule to add GET params
RewriteRule ^(.*)$ index.php?page=$1
There are several tutorials regarding mod_rewrite on the internet

mod_rewrite is redirecting instedad of rewriting

I must be missing something obvious, but I can't make it work
I want to have nice urls with subdomains, but instead of some directories I want to read the subdomain's content from the file:
RewriteEngine On
RewriteBase /
Options +FollowSymlinks
RewriteCond %{HTTP_HOST} ^subdomain.example.com
RewriteRule (.*) http://example.com/subdomain.php
These rules works, but if I enter subdomain.example.com I am redirected to example.com/subdomain.php - but I do not want this, I just want internally rewrite the url...
Thank you very much! I tried [QSA, L], do not work.
If you replace this:
RewriteRule (.*) http://example.com/subdomain.php
With this, I suspect it will work as you are expecting:
RewriteRule (.*) subdomain.php
There is no need to rewrite the domain unless you actually want to redirect to another domain, you only need to rewrite the request to point to the appropriate file. Indeed as you discovered rewriting the domain will cause a redirect. Normally RewriteRule matches all of the request after the domain, so just the path and query.
Rather than use mod rewrite for this, if you have access to the DNS controls of your domain, you could set a catchall subdomain with a wildcard (either '%' or '*') that directs to the same local directory. There, you could have a PHP script which all requests are directed to using:
Options +FollowSymlinks
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)$ /index.php?p=$1 [L]
and this would run all the requests into that PHP file. There you can have something that checks the $_SERVER variables for the requested domain, and a checker to see the subdomain. There it could use something such as a file_get_contents() subroutine to forward the relevant data to the client, and have 404 or 403 header responses if a request is made that may be valid, but not to that subdomain.
hope that makes sense...

.htaccess RewriteRule so user views example.com/folder but is served example.com/f1/f2/f3/folder/index.php

I am trying to figure how to make a .htaccess RewriteRule so a visitor views example.com/folder
but is served
example.com/f1/f2/f3/folder/index.php
where f1/... is just an arbitrary line of folders.
I have kicked mod_rewrite a little, and got some really weird results, none I was going for though.
I'm not quite sure what you're trying to achieve. This, however, might solve your problem. Basically it translates any query for /folder, /folder/ or /folder/... to /f1/f2/f3/folder/...:
RewriteRule ^folder(/.*)?$ f1/f2/f3/folder$1
EDIT
If you don't care about anything after site.com/folder, this should suffice:
RewriteRule ^folder$ f1/f2/f3/folder/index.php
EDIT #2
Rewriting the root (according to comment by OP):
RewriteRule ^(.*)$ folder1/folder2/$1 [QSA]
There may be other (better?) ways to translate the root, though.
Docs are available on the QSA directive.

Resources