CodeIgniter URL Rewrite - mysql

I have found so many examples of URL Rewrite in CI, but not a final and good solution, i have url like this
www.somesite.com/index.php/tehnicki/tekstovi
I want to have url like this
www.somesite.com/about.html
This about is GET Variable, that is going in MySql Query, it will be no number it will be some NAME, how to do that?
And what i have to write in tehnicki controller to take that GET Variable, is there any helper in CI for MySQL Attack, or i have to write it on my own :)

Okay, let's see, it seems messed up and it doesn't make sense but I'll give you what you need.
First we will have to remove the index.php file :
- use this as .htaccess
//.htaccess
RewriteEngine on
RewriteCond $1 !^(index\.php|Skin|robots\.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L,QSA]
next, in your config.php set index_page to an empty string
// application/config/config.php
$config['index_page'] = '';
on the same file, scroll to url_suffix, and set it to .html
// application/config/config.php
$config['url_suffix'] = '.html';
now head to your routes.php and apply a rewrite rule
// application/config/routes.php
$route['about'] = "tehnicki/tekstovi";
I'll quickly explain what I did here so you get how it works:
1- we removed the index.php section of the url in order to clean it
2- we added a url suffix that will be generated on all the pages
3- we applied a rewrite rule that will match /about.html to the controller tehnicki and the action tekstovi (tehnicki/tekskovi)

Related

Is there any possibility to remove ? and = in html?

I am trying to give pretty url for my html page. I found many answers but they are more related to php. I need to convert this link below,
http://localhost/blog.html?id=1
to
http://localhost/blog/1
I have the .htaccess file for removing html
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.html [NC,L]
Help me to change my url parameters.
The examples you find are perfectly valid for you, since this is independent of any higher level logic like php. These rules operate on the level of the http server.
Anyway, here is a rule to get you started:
RewriteEngine on
RewriteCond %{QUERY_STRING} (?:^|&)id=(\d+)(?:&|$)
RewriteRule ^/?blog$ blog.html?id=%1 [END,QSD]
In case you get an http status 500 ("internal server error") using this then chances are that you operate a very only version of the apache http server. You will find a hint about an unsopported [END] flag in your http servers error log file in that case. Try replacing the END flag by the older L flag, that probably will work the same, though this depends a bit on your setup.

Apache rewrite exclude empty URI

The following rewrite appends .html to the URI.
RewriteRule ^/(.*)$ /sites/uk/$1.html [NC,L]
However, when it comes to the index page it is giving me:
.../sites/uk/.html instead of:
.../sites/uk/index.html
What I want to know is how to exclude an empty URI so it doesn't append .html to nothing. I have tried the following rewrite condition:
RewriteCond %{REQUEST_URI} !^/?$ However this is unsuccessful.

HTML apache rewrite to new directory

I have been working on this for over an hour, and clearly I'm missing something.
I need to redirect:
www.site.com/directory/file.php?m=12345 to www.site.com/file2.php?m=12345
No matter what I am doing, the rule is not met, the data is missed or the redirect tries to go to the same directory.
I am doing the redirect in .htaccess.
The RewriteEngine is on and other redirects are working.
There is not a stop before the rewrite to prevent the rule from being read.
I am using these flags NC, R, L
DirectoryIndex Default3.php Default3.PHP
#Block listing of folder contents
IndexIgnore *
RewriteEngine on
#Make access to image folder case insentive
RewriteRule ^images/(.*) Images/$1
RewriteRule ^common/(.*) Common/$1
#redirect old photo download page
RewriteRule GetZipPhotos.*(\d*) PhotoDownload.php?mls=$1 [NC,QAS,L]
Thanks for any help.
I have changed the .htaccess to
DirectoryIndex Default3.php Default3.PHP
#Block listing of folder contents
IndexIgnore *
RewriteEngine on
#redirect old photo download page
RewriteRule ^Agents_Admin/GetZipPhotos.php(.*) /PhotoDownload.php$1 [R,NC,L]
#Make access to image folder case insentive
RewriteRule ^images/(.*) Images/$1
RewriteRule ^common/(.*) Common/$1`
The rewrite is still not working. According to the htaccess tester this does catch the original URL and should redirect correctly. But it is not. The original file keeps getting ran.
RewriteRule ^/Agents\_Admin/GetZipPhotos.php$ /PhotoDownload.php [R,NC,L,QSA]
QSA means Query String Append, in the (.*) and $1 are only URI parts, not parameters

htaccess rewrite rule url

I want to write htaccess rules where I can rewrite this
www.example.com/Project_Name/1/23 project.html?n=$1&p=$2&i=$3​​​​​​​​​​​​​​
I have this already, but the problem is that I have a file in /projects/projects.xml which gets rewritten as well when I call it with Ajax.
RewriteRule ^([\._\-a-zA-Z0-9]*)\/([0-9]*)\/([0-9]*)(.?)$ /project.html?n=$1&p=$2&i=$3 [NC]
Try adding RewriteCond %{REQUEST_FILENAME} !-f above the RewriteRule. Assuming projects.xml is an actual file, that should prevent rewriting.

How to avoid double google indexing using .htaccess?

I have a website, with a nice RewriteRule in its root, that redirects all the queries of this kind:
http://domain.com/foo/parameter
into
http://domain.com/index.php?args=parameter
Users can only see the clean URL and everyone is happy.
Now here is the problem: domain.com DNS have an A record for domain.com, pointing to a private server IP, and an A record for mail.domain.com, pointing to the exact same IP.
For some unknown reason, in the last couple of months, Google double indexed all the pages of my site (http://domain.com/foo/par1, http://domain.com/foo/par2 etc.) with another set with the mail subdomain (http://mail.domain.com/foo/par1, http://mail.domain.com/foo/par2 etc).
I thought I could get rid of all of them redirecting any request to mail.domain.com/$whatever to domain.com and eventually Google would understand that all those pages with the 'mail' subdomain redirects to the homepage and are therefore not necessary.
I tried this in .htaccess:
RewriteCond %{HTTP_HOST} ^mail.domain.com$ [NC]
RewriteRule ^(.*)$ http://domain.com [R=301,L]
But this redirects to a visible URL that looks like this: http://domain.com/index.php?args=parameter, while I just want a redirect to the homepage.
What's the correct form, and are there more elegant ways to achieve this, maybe adding something into robots.txt? (Please note that I can't just disallow a subfolder here)
If you just want to redirect to home page by discarding the original REQUEST_URI and QUERY_STRING then use these rules:
RewriteCond %{HTTP_HOST} ^mail.domain.com$ [NC]
RewriteRule ^(.*)$ http://domain.com/? [R=301,L]
By putting ? in the end it will strip out original query string, thus a URL of this type: http://mail.domain.com/index.php?args=parameter will become http://domain.com/
Your rule is correct, but you need to put it before all the other rules (right after RewriteEngine On) or it will pick up the latest state of the internal rewritten URL.
Update: Hmm, you said that your old rule redirects correctly but is using the internal, ugly, URL. That actually shouldn't be the case unless you add $1 to pick out the matched string.
RewriteCond %{HTTP_HOST} ^mail.domain.com$ [NC]
RewriteRule ^(.*)$ http://domain.com/$1 [R=301,L]