Redirecting SEO URL with oxid functions - php

I am trying that when someone opens this link: [url]www.example.com/invite/1234randomhashtag[/url]
Will be redirected to:
www.example.cloud/index.php?cl=register_new_user&fnc=register&hash=1234randomhashtag
Now this can easily be done with the PHP header.
However I have also found the oxutilsurl class. Is it even possible to do this with this class? Does it help?

Oxid does not support you by changing the original oxid routing mechanics in a way that they would work for you. There is a way to set up static redirects within the general settings inside the oxid admin backend (see SEO tab). But those do not support wildcards (/invite/*) like you would need them.
Theoretically speaking, if you really wanted to have a solution for this one inside an oxid module (to avoid hacking the core, and having it bundled within a module) you could extend one of several oxid functions that are being called before oxids very own mvc based routing logic is reached and manually redirect at that point. Basically this could be done in every core function that is being called before you get routed to the 404 page (oxseodecoder::processSeoCall)
Considering the official info from oxid, that lists the non overloadable classes, you should be able to extend oxshopcontrol::start (or even oxseodecoder::processSeoCall) and add something like the following:
if(preg_match("/\/invite\/.*/", $_SERVER['REQUEST_URI'])){
$randomHash = basename($_SERVER['REQUEST_URI']);
oxRegistry::getUtils()->redirect($this->getConfig()->getShopURL().'index.php?cl=register_new_user&fnc=register&hash='.$randomHash , false, 301);
}
Anyway, I think the simplest, fastest and most performant approach on this one would be setting up url redirects within the .htaccess file inside your shops root directory.
The following should work:
RewriteRule ^invite/([A-Za-z0-9-]+)/?$ index.php?cl=register_new_user&fnc=$1 [NC,L]
You could put that code immediately under RewriteBase / inside the .htaccess file within your shops root directory.
I put that rewrite rule together with information from this article.

OXID has no dynamic routing based on url parts.
There is a SEO URL entry in the database for every valid SEO Url.
You could generate a SEO Url when someone uses your invitation function and remove the url after couple of months.
Or you need to change your generated urls a bit and make it look like this:
www.example.com/invite#1234randomhashtag with # instead of /
and then parse your hash from $_SERVER["REQUEST_URI"] and set your variables or redirect to the final URL
But you still could solve this outside of OXID with .htacess rewrite rules (i guess) or another php micro framework like "Slim" or "Lumen" running in /invite/ directory and redirecting your visitor back to the shop

Related

magento 1.4 - have different subdomain route to same location

I am concerned this may not be possible (at least not easily) in Magento (1.4).
So we currently have a site set up:
shopping-public.mysite.com
Searching through core_config_data and the source code, shopping-public is referenced quite a few times.
What I want to accomplish is to have the following subdomain work on the same code base, AND have all the links between pages match up:
shopping-development.mysite.com
I have set up ServerAlias shopping-development.mysite.com in the .conf file, and it works - that is, I'm getting there, and the page is being presented.
However, it does NOT work in the sense that:
a) the references to the CSS files and JS files are still to shop-public.mysite.com, and
b) links to products and other pages are still to shop-public.mysite.com
How do I solve (a) and (b) so that, regardless of the subdomain (or even domain), asset file links and page links change relative to the (sub) domain I am on?
I am fairly new to Magento, and there are a LOT of xml values that reference this involved..
Magento have a lot of configuration.
core_data
htaccess if use apache need test rewrite rules ok or no.
and maybe hardcoded index.php with switch case?
But firstly try clean cache.
Magento will, as you can see, always attempt to redirect back to the primary domain. To achieve this, I think you'd probably be best using different store views/sites and then using .htaccess to load the specific site required.
With this approach, there would be a concern over duplicate-content in Google's eyes I'm sure.

A Dynamic website using PHP

I am a beginner PHP programmer. I searched google for a "Dynamic PHP website tutorials". I found some stuff. They use $_GET variable to make the website dynamic, so the URL's appear like this:
example.com/?page=home
example.com/?page=about
example.com/?page=Downloads
and so on...
But most of the dynamic websites that I found on the internet has links like this:
example.com
example.com/about
example.com/download and so on....
So how do they do so ?? Have they got folders for all the catogories ?? And Also some websites have article URLs (eg : example.com/articles/posts/2010/article1.php). It would be a reall mess if they've got folders for all items. If not then How ?? Can someone give an example please ?
If you're using apache then read: http://httpd.apache.org/docs/current/mod/mod_rewrite.html
If you're using IIS then read: http://www.iis.net/downloads/microsoft/url-rewrite
In order to use the $_GET variable, it must be in the query string (or being routed through some other means that isn't 'default').
For example, the URLs you're using would become.
example.com/?page=home
example.com/?page=about
example.com/?page=Downloads
Additionally, you can rewrite URLs using the .htaccess file (http://httpd.apache.org/docs/2.0/misc/rewriteguide.html)
You are interested in page routing.
htaccess and MVC routing may start you down the correct path :)
To echo everyone else, it's called a url rewite.
For example, the url
http://example.com/index.php?ext=blog&cat=news&date=12122012
can be rewritten as
http://example.com/blog/news/12-12-2012
This isn't automatic, it requires defining the patterns used for understanding the new URL in a file called .htaccess which usually resides in the servers root directory. Note that the preceding '.' in the filename makes it a hidden file.
When I was first getting used to PHP i found the site http://phpbuilder.com a great help. They have a lot of articles, and a forum that is fairly nice to noobies. http://devshed.com is a good site too, and has a large amount of information on subjects outside of PHP.
You can achieve that affect with folders, but most use rewrites (Apache). It's a bit too broad of a subject to go in to here, but if you just search for rewrite tutorials you'll find some pretty quickly.
The $_GET is only to get variables from the URL. While this can be used to make sites dynamic, this is a technique which is usually frowned upon.
With rewrites, you basically have a URL like /about, but the rewrite tells your server something like "act like this is actually ?page="about"), which you then use the $_GET to process.
Being PHP beginner I will not urge you to use .htaccess, As you will need to learn lot many things before you proceed further. You have 2 option to send a request one is GET and POST. You can get more information about same on internet.
Also you have an option to start your dynamic website using CMS and I will recommend you to use wordpress. CMS will have some in-built function which will help you to do your work faster. Also using their control panel you can update the URL format.
I will also urge you to go step by step and follow every tutorial that you will find on internet.
All the best
If you want to do this you have to use .htaccess file and have to load mod_rewrite in your apache server.
In you root directory create file named .htaccess
Then Write:
RewriteEngine On
RewriteRule ^(.*)\.php$ index.php?page=$1 [L,QSA]
And After that call a page
my-page.php
It will redirected as a index.php?page=my-page internally but in browser it will show as my-page.php

I want to use the strategy of wordpress for url rewriting

What is the strategy of wordpress for url rewriting.
In .htaccess they have only few line of code,for my app I need more than 80 line of code...
To 20 app's apache blows up and server too.
I have url structure like this:
http://localhost/list.php?title=two-wheel; (title var is used for search)
http://localhost/list.php?title=four-wheel&category=cars;
http://localhost/list.php?title=four-wheel&category=cars?features=car-alarm;
http://localhost/list.php?title=four-wheel&region=wyoming&category=cars?features=car-alarm;
and manny other pages.
How could I write my url's like them?
Can you provide an example of what code is need to write in .php page and in .htaccess based by wordpress strategy?
Wordpress loads any request into the application and then loads a map of regular expressions stored inside the database to resolve the actual command of the request.
This is done to support other types of URL rewriters - not only .htaccess but also PATHINFO and error pages.
Next to that plugins can add their own "rewrite-rules".
However this also has it's cons as it can consume a lot of resources and bring the script down.
If you want to rewrite URLs like them, feel free to use the sourcecode publicly available. However, I would suggest to review your rewrite rules first. Only because there are not so many rules within the .htaccess file, this does not mean that are no rules at all.

Is wordpress SEO friendly url works without using htaccess?

Wordpress uses friendly seo url without using htaccess.
Can any explain this to me please how they do it.
The only way i can think of is to do something like this.
domain.com/index.php/nnn/mmmm/
But wordpress does not use index.php
I know they are not using htaccess.
Please let me know.
Thank you.
WordPress actually has a single .htaccess file that they don't need to change which redirects all requests to index.php
index.php then looks at the permalinks rules and runs a few database queries to determine which page to send you.
So for instance if the permalink rule is %postdate%/%postname% (may not be the actual WordPress permalink variables. I haven't been using WordPress for too long) then it would just use regular expressions (or combinations of substr() and strpos()) to put %postdate% and %postname% into variables. Next it runs a simple database query for any item matching that date and that name. If nothing is found, redirect to search. If you find more than one, list them all (like a category page). If you find one and only one, send that page.
As far as actually "sending" the page, that's just a matter of settings certain variables (such as $the_post['content']) and then include()'ing the proper theme file.
include()'ing the theme file is a simple if() statement.
if(file_exists("wp-content/themes/<your_theme>/$the_post['type'].php")){
include("wp-content/themes/<your_theme>/$the_post['type'].php");
} else {
include("wp-content/themes/<your_theme>/index.php");
}
Mind you these aren't the exact variable names or the exact functions as they occur. This is just a very simplified version to give the general idea of how these systems work.
Wordpress does use .htaccess files. You can modify the permalinks in the permalinks section your wordpress site. You can see information on it here.
If you are using IIS you can use this method
Wordpress does actually use .htaccess. Make sure you have hidden files displayed! If you're FTP-ing, there'll be a setting in your client.
To answer the main question:
No.
As for the other points of yours:
Wordpress uses friendly seo url without using htaccess.
USUALLY it does not.
USUALLY it requires the .htaccess to make nice urls work.
However, as Wordpress' Codex says:
If you are using IIS 7 and have admin rights on your server, you can
use Microsoft's URL Rewrite Module instead. Though not
completely compatible with mod_rewrite, it does support WordPress's
pretty permalinks.
So they are always using some kind of rewrite module anyway.
Can any explain this to me please how they do it.
There is one interesting thing to explain:
There is only one .htaccess file.
Which would not be so interesting if it would contain some kind of general rule rewriting urls to some.php's GET parameters (domain.com/verynice => domain.com/index.php?page=verynice).
But that is not happening.
What is happening is that
It rewrites ANY url that is NOT a specific FILE or DIRECTORY to index.php EXCEPT the index.php (to prevent infinite loop).
So urls like domain.com/blah/blah and domain.com/lol/trololo are both actually requesting the index.php - the only difference is in the requested URI.
Using superglobal variables like $_SERVER['REQUEST_URI'] they get the requested URI and after that they parse the requested URI and store the results in varibles accordingly.
The only way i can think of is to do something like this.
domain.com/index.php/nnn/mmmm/
In common explanation of the URL this is NOT request to the index.php file itself.
It is a request for the "mmmm" folder in folder "nnn" which is in folder "index.php".
However apache usually understand this as a request for the index.php file .
For other files e.g. my.file domain.com/my.file is a file request, domain.com/my.file/ is a folder request (notice the slash / at the end)
But wordpress does not use index.php
That is NOT TRUE.
Especially if you are using nice-urls the index.php is practicaly fundamental for Wordpress.
I know they are not using htaccess.
This point of yours could meant 3 things:
They are using the htaccess but not for processing the URL (which I've explained above)
They are not using it at all - not true, unless they would be using the MS' URL Rewrite Module
You don't know. You did not provide any information about how did you find out they are not using it, so we can't know if you really know or you just think that :)
Please let me know.
I let you know. And I hope I've answered all your questions :), if not - use comments :)
Thank you.
You are welcome.
I was happy to help :) ☺ ☺ ☺ ☺ ☺

Should I use mod_rewrite for my site's URLs?

My site currently handles URL's like this...
/?p=home
/?p=profile&userid=1
/?p=users.online
/?p=users.online&page=23
/?p=mail.inbox
/?p=mail.inbox&page=12
... and so on, there is probably at least 120-150 different pages, on my site a page is built like this,
index.php includes a main config file which then includes function/class files into it
index.php then includes a header file
index.php then includes the page file which is from the url ?p=pagename
index.php then includes a footer file
That is how every page on my site is compiled, through the index page like that and I have been considering/thinking about cleanning up the URL's as I am re-writing/restructuring most of my sites code right now, it's the perfect time to do it if I am going to do it. What I mean by cleanning up the URL's is using mod-rewrite so the URL structure above would look like this instead...
/home
/users/1 //user ID might switch to use username as well
/users/online
/users/online/23 or /users/online/page/23
/mail/inbox
/mail/inbox/12
So first of all is there any downfalls to doing this, does it create a lot more processing work since it is using mod_rewrite?
Also would it be hard to write the regex or whatever is needed to match the file names in the format that I show above, I listed only a few of the pages but there would be at least 100 different URL pages I have blogs, bulletins, forums, all kinds of stuff
Absolutely. That's one of Apache's main purposes, so it's been designed to do it very efficiently. In fact, I'd emplore you to use that method.
It makes cleaner URLs for visitors
It's fantastic for SEO
It makes the website more professional
It makes it easier for users to guess URLs if they are trying to find a certain page without actually traversing through your site ti find it.
There are no downfalls, and a ton of advantages to using that URL structure. Go for it!

Categories