I am not an expert in htaccess but would like to make a redirect but seems like it doesn't work as I expect.
I have following rules:
RewriteCond %{HTTP_USER_AGENT} (SkypeUriPreview)
RewriteRule ^(.*)$ http://blog.yuppi.com.ua/server/crawler_proxy/routee.php?path=%1 [NC,L]
And I would like this request
http://blog.yuppi.com.ua/share/post/one-two-three
Redirect to http://blog.yuppi.com.ua/server/crawler_proxy/routee.php?path=/share/post/one-two-three
Instead I recieve
http://blog.yuppi.com.ua/server/crawler_proxy/routee.php?path=SkypeUriPreview
In your RewriteCond, (SkypeUriPreview) will capture SkypeUriPreview in %1.
In RewriteRule, (.*) will capture the path to $1. See here for a more visual example.
In your rule, replace %1 with $1:
RewriteCond %{HTTP_USER_AGENT} (SkypeUriPreview)
RewriteRule ^(.*)$ http://blog.yuppi.com.ua/server/crawler_proxy/routee.php?path=$1 [NC,L]
Related
This silent redirect in htaccess:
RewriteCond %{QUERY_STRING} ^pic_id=(\d+)$ [NC]
RewriteRule ^album_showpage\.php$ /gallery/image_page.php?image_id=%1 [L]
redirect a url that looks like:
example.com/album_showpage.php?pic_id=1906
to:
example.com/gallery/image_page.php?image_id=1906
that works great. But when the URL has a parameter like:
album_showpage.php?pic_id=1906&mode=prev
or
album_showpage.php?pic_id=1906&mode=next
the redirect wont work.
Question: How to cut of any parameter after pic_id=1906
thank you
You need match against the rest of the query string.
RewriteCond %{QUERY_STRING} ^pic_id=(\d+)(&.*)?$ [NC]
RewriteRule ^album_showpage\.php$ /gallery/image_page.php?image_id=%1%2 [L]
If you don't want the mode=prev stuff to be included in the rule's target, then you can simply remove the $ instead of attempting to match against it:
RewriteCond %{QUERY_STRING} ^pic_id=(\d+) [NC]
RewriteRule ^album_showpage\.php$ /gallery/image_page.php?image_id=%1 [L]
I want to redirect all "com" extensions to "org" extensions, even if they are https. This is what I have so far...
RewriteCond %{HTTP_HOST} domain.com$ [NC]
RewriteRule .* https://www.domain.org [R=301,L]
The problem is, this only redirects if it is "http". How can I also redirect if it is an https domain?
Any help would be appreciated. Thank You Much.
Try:
RewriteCond %{HTTP_HOST} domain.com$ [NC]
RewriteCond %{HTTPS}:s (on:(s)|off:s)
RewriteRule .* http%2://www.domain.org [R=301,L]
The second condition creates a capture group in the event that HTTPS is "on", otherwise, there is no capture group. The "s" is captured and then backreferenced using %2.
Additionally, you can redirect the URI as well by changing the rewrite rule line to:
RewriteRule ^(.*)$ http%2://www.domain.org/$1 [R=301,L]
I would like to rewrite the English names of php files to their Dutch equivalents.
For example: someurl.com/news.php?readmore=4#comments should become someurl.com/nieuws.php?leesmeer=4#kommentaar. The code from news.php should be executed but nieuws.php should be in the url the arguments should function as well.
I tried several htaccess examples but I can't get it to work.
Any help would be appreciated.
Edit: Working progress from answers below and final solution.
RewriteCond %{QUERY_STRING} ^readmore=(.*)$
RewriteRule ^news.php$ nieuws.php?leesmeer=%1 [R=301,L]
RewriteCond %{QUERY_STRING} !^norewrite[\w\W]*$
RewriteRule ^news.php$ nieuws.php [R=301,L]
RewriteRule ^nieuws.php$ news.php?norewrite [QSA]
RewriteCond %{QUERY_STRING} !^norewrite[\w\W]*$
RewriteRule ^search.php$ zoeken.php [R=301,L]
RewriteRule ^zoeken.php$ search.php?norewrite [QSA]
# make sure rewrite is activ
RewriteEngine On
# Rewrite a request for nieuws.php to news.php
RewriteRule ^nieuws.php$ news.php
Should do the trick.
Instad you could send all requests to an index.php and parse them there:
## Redirect everything to http://hostname/?path=requested/path
RewriteEngine On
RewriteRule ^([\w\W]*)$ index.php?path=$1 [QSA]
[QSA] makes sure you get the original get arguments too.
Now you have to parse the request in $_GET['path'] in you index.php and include the requested page.
eg:
if ($_GET['path'] == 'nieuws.php') {
include 'news.php';
} else if (empty($_GET['path'])) {
echo "HOME";
}
if you want to make make the user always sees nieuws.php in its address bar, even if he requested news.php, you could try the following:
RewriteEngine On
# Redirect news.php to nieuws.php if and only if the request comes from the client
# (suppose the client didn't set ?norewrite.)
RewriteCond %{QUERY_STRING} !^norewrite[\w\W]*$
RewriteRule ^news.php$ nieuws.php [R=301,L]
# Send news.php if nieuws.php was requested and prevent news.php from being redirected
# to back to nieuws.php by the rule above.
RewriteRule ^nieuws.php$ news.php?norewrite [L,QSA]
(R=301 means send a "moved permanently" redirect to the client, L means stop rewriting after this rule matched)
The hole thing with norewrite (you could use something else instead) is only needed to avoid an endles loop of rewriting between news and nieuws.
To translate the GET arguments, you can try the following code before the first line of the above code:
RewriteCond %{QUERY_STRING} ^readmore=(.*)$
RewriteRule ^news.php$ nieuws.php?lesseer=%1 [R=301,L]
Things after a the # in an url can't be changed in .htaccess, since they aren't send to the server at all. The only chance to change them is using JavaScript. (See lots of question here on manipulating them within JavaScript)
Try:
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /news\.php
RewriteRule ^ /nieuws.php [L,R=301,QSA]
RewriteRule ^nieuws\.php$ /news.php [L,QSA]
This may be a basic question regarding RewriteRule but I just counldn't make it work.
What I want to do is detect urls like:
mydomain/myapp/id/some/random/url.html?param=somethingThatIdoUse
mydomain/myapp/id/other/randomabc/perrito.php?param=somethingThatIdoUse
...
The part that I need to discart is from the /id/[all this]?param=somethingIdoUse and use the param if is possible or send the complete url as param so I can regex to get the param.
And have a rule that detect that /id/ exist and redirect to something like:
mydomain/myapp/other/manageRequest.php?params=somethingThatIdoUse
(the params I could get the whole url and strip it as string is no problem)
As well the application have different modules like:
mydomain/myapp/moduleOne/index.php
mydomain/myapp/moduleTwo/index.php
This have to keep working the same.
As far I've tried some of them like:
RewriteEngine On
RewriteCond %{THE_REQUEST} ^GET /.*;.* HTTP/
RewriteCond %{QUERY_STRING} !^$
RewriteRule .* http://localhostdev/app/index.php %{REQUEST_URI}? [R=301,L]
RewriteEngine On
RewriteBase /spt/
RewriteCond %{REQUEST_FILENAME} !^id$ [NC]
RewriteRule ^(.*)$ index.php [R=301,L]
RewriteEngine On
RewriteCond %{REQUEST_URI} !/campaings/response\.php$
RewriteRule ^/something/(.*) /other/manageRequest.php? [L]
But nothing seamed to do kind of what I needed.
Thanks in advice
mydomain/myapp/id/some/random/url.html?param=somethingThatIdoUse
Here is an example using the above URL:
RewriteRule ^id/some/random/url.html/? /myapp/other/manageRequest.php [L,NC]
The query will be passed through unchanged to the substitution URL
well actually end up being really basic it worked with:
RewriteRule ^.*id.*$ handleRequest.php [NC,L]
I do get the params as they are sent!
What am I doing wrong, here?
I've moved to a new Web store platform (OSCommerce to Drual/Ubercart). OSCommerce uses arguments to pick out products.
I want to redirect from this:
http://www.ztwistbooks.com/oscstore/product_info.php?products_id=64
To this:
http://www.ztwistbooks.com/node/39
This does NOT work (it gives a 404):
RewriteCond %{HTTP_HOST} ^.*$
RewriteRule ^oscstore/product_info.php\?products_id\=64$ "http\://www.ztwistbooks.com/node/39" [R=302,L]
Other rewrite rules are fine, for instance, I can redirect stuff that doesn't use the ?arg=value, and it works fine:
RewriteCond %{HTTP_HOST} ^.$
RewriteRule ^oscstore/?(.)$ "http\://www.ztwistbooks.com/index.php" [R=301,L]
RewriteRule's pattern is applied to the URL-path, so you need something like this:
RewriteCond %{QUERY_STRING} ^products_id=64$
RewriteRule ^oscstore/product_info.php$ http://www.ztwistbooks.com/node/39 [R=302,L]