ASP.net redirect rule - asp.net

<rewrite url="~/forum/viewtopic.php\?t=([0-9]+)" to="~/Handlers/PermRedirect.ashx?ID=$1&action=forumpost" processing="stop"/>
This works great, but how to I make it redirect if t=([0-9]+) exists anywhere in the querystring?
Example URL's that it should match:
/forum/viewtopic.php?t=123&f=rgrg&rt=224
/forum/viewtopic.php?ty=345345&t=123&f=rgrg&rt=224
/forum/viewtopic.php?f=rgrg&rt=224&t=45
Can I make one rule to match them all? One ring, to rule them all.

Does this do the trick in your case?
url="~/forum/viewtopic.php\?.*t=([0-9]+).*

Related

Too many redirects regex redirect

I am on Wordpress and right now using Yoast Seo Pro which has a redirection section including a Regular Expressions redirects section.
How do I redirect say /mycategory1/page/pagenumberhere/ to
/category/mycategory1/page/pagenumberhere/ ?
So I only need to make one redirect that handles all possible page numbers?
I have tried /mycategory1/page/([0-9]) to /category/mycategory1/page/$1
It looks like it redirects to /category/mycategory1/page/pagenumberhere/ but there is an err_too_many_redirects on the /category/mycategory1/page/pagenumberhere/ with this rule added so I have removed it again.
If you can help with code into the .htaccess instead perhaps I could try that.
Your rule already looks promising.
However, as #starkeen pointed out, the regular expression mycategory1/page/([0-9]) matches every request containing mycategory1/page/ with some trailing number. This is true of category/mycategory1/page/ as well, as it also contains "mycategory1/page".
If you want to match requests starting with mycategory1/page, you must anchor the regular expression at the beginning with ^, see Apache mod_rewrite Introduction - Regex vocabulary
RewriteRule ^mycategory1/page/([0-9]) /category/mycategory1/page/$1 [L]

How do I create a rule that will fire only on my site's home page?

I using Google Tag Manager and I am trying to setup a rule that will fire ONLY on my sites homepage.
The issue is that I am not certain how to handle all of the URL permutations of the homepage. How can I create a rule that will handle:
"http://" "https://" "http://www." "https://www."
Also, we use Sitecore and support multiple languages, so the homepage url can also display as:
"http://www.mysite.com/en"
I am not sure how to handle the culture identifier that is inserted into the URL path after a visitor has used the navigation on the site.
Is it possible to use the OOTB Google Tag Manager rules to handle this scenario, or will I have to implement a Tag Manager Data Layer?
The following rule would check if it's the homepage:
{{url}} matches RegEx ^https?://(www\.)?mysite\.com/?(index\.html)?$
{{url}} gives the whole address whereas {{url domain}} just gives the domain and {{url path}} just the path (including the initial forward slash).
This matches http and https, with or without www and with or without index.html at the end. It also matches mysite.com/ and mysite.com (without the forward slash at the end). If you want to check for URL permutations at the end of the homepage, you could do something like:
^https?://(www\.)?mysite\.com/?(en|es|fr)?$ etc.
Also, forward slashes do NOT have to be escaped. In fact, escaping forward slashes broke the firing rule in GTM for me...
See http://en.wikipedia.org/wiki/Regular_expression
edit: and if you want to ignore the querystring (which is a good thing to do because most ads add query keys such as utm_source etc. to the url), you can have something like this:
^https?://(www\.)?mysite\.com/?(index\.html)?/?(\?.*)?$
(note the (\?.*)? at the end)
Ok... so after researching the Google Tag Manager Forum, this can be accomplished by making separate url "ends with" rules for your site url and then your site url with a trailing forward slash such as:
rule 1 : url ends with http://mysite.com
rule 2 : url ends with http://mysite.com/
I think it was the trailing slash that was confusing the matter as I was setting up the rules.
This is a super robust way to know it's your home page with either protocol and allow for a backslash all with one line of Regex...
^https?://www.mydomain\.com\/?$
Not sure sure why the initial double backslashes don't have to be escaped, but it works. Would have expected ^https?:\/\/www.mydomain\.com\/?$ Maybe someone else knows that :)

IIS 7.0 Url Rewrite2 Rule and Regex Issues

I am using IIS.net's Url Rewrite program on my server to make rules for URL Rewrite. I have pages on my Asp.NET 4.0 Web Site such as Page.aspx, and News.aspx.
When I create a rule for Page.aspx (http://www.foo.com/Page.aspx?PageTitle=Foo to http://www.foo.com/Foo) It works great.
When I create a rule for News.aspx (http://www.foo.com/News.aspx?NewsTitle=Foo to http://www.foo.com/Foo) It works great too.
But when I create rules for both News.aspx and Page.aspx, it fails. Program looks rule order. If News's rule is at top, News.aspx Url rewritten, and Page.aspx Url rewrite fails.
If Page's rule is at top, Page.aspx Url rewritten, and News.aspx Url rewrite fails.
I guess thhis problem occurs because of regex matching. Let me show you:
Rule for News.aspx is at top. So it works fine. But when I click Page.aspx, the RewriteUserFriendlyURL1's Pattern catch my URL, and tries to redirect it News.aspx (Shown in Action Url).
I hope my description is clear.
My question is: How can I avoid this problem? For example I can make a new page called Redirect.aspx, and can redirect all pages to here. I can make 1 rule for Redirect.aspx.
But I think there should be another way to solve this issue with configuring these rules.
Thank you.
The problem is that the regular expressions for RewriteUserFriendlyURL1 and RewriteUserFriendlyURL2 are exactly the same so in that case the order in which they are listed decides which rule gets applied first.
I understand what you are trying to accomplish but it can not work like that. It's impossible for the URL rewrite module to know if /Foo is a news article or a page. Your best option is probably to put the news under /news/<title> and keep /<title> for your regular pages. In that case you can use /news/ to make a difference between news and pages.
So you should keep RedirectUserFriendlyURL2 and RewriteUserFriendlyURL2 the same but change the action URL for RedirectUserFriendlyURL1 to /news/{C:1} and change the pattern for the RewriteUserFriendlyURL1 rule to ^news/([^/]+)/?$ (note: no slash between ^ and news).

ASP.Net double URL Rewriting

I am using URL Rewriting to make my URLs more understandable(well, thats why it is used mostly).
But I would like to further rewrite them to make them even more understandable.
My home page is at /Pages/1/Home.aspx after rewriting with the below rule.
<rewrite url="~/Pages/(.+)/(.+).aspx" to="~/MainTemplate_$1.aspx?PageName=$2"/>
But I suppose it doesn't look good, at least for home page. So I have applied below rule again.
<rewrite url="~/index.aspx" to="~/Pages/41/Home.aspx"></rewrite>
But that doesn't work. Redirect instead of rewrite works, but the address bar would show clunky details which I don't want.
How do I make it work?
Thanks!
Just had to rearrange the rule order to get it working. Pretty straight forward.

How to specify rewrite pattern in pages.xml

I am having many xhtml files in several folders. I want to rewrite the url as
from http://localhost:8080/folder1/file1.seam to http://localhost:8080/folder1/file1
In file1.page.xml I gave
<rewrite pattern="/folder1/file1" />
The above provided me with the correct pattern. But i have many files and i don't want to specify this rewrite pattern in every page.xml file. Is there any way to specify this in pages.xml?
EDIT:
http://localhost:8080/folder2/file2.seam to http://localhost:8080/folder2/file2
http://localhost:8080/folder3/file3.seam to http://localhost:8080/folder3/file3
More samples of my translation
Rewriting occurs based on rewrite
patterns found for views in pages.xml
Seam URL rewriting does both incoming
and outgoing URL rewriting based on
the same pattern
Example:
<page view-id="/home.xhtml">
<rewrite pattern="/home" />
</page>
any incoming request for /home will be sent to /home.xhtml
any link generated that would normally point to /home.seam will instead be rewritten as /home
Rewrite patterns only match the portion of the URL before the query parameters
Both these will be matched
/home.seam?conversationId=13
/home.seam?color=red
Rewrite rules can take these query paramters into
consideration
<page view-id="/home.xhtml">
<rewrite pattern="/home/{color}" />
<rewrite pattern="/home" />
</page>
Incoming request for /home/red will be served as if it were a request for
/home.seam?color=red
If color is a page parameter an outgoing URLr /home.seam?color=blue would output as
/home/blue
Remember:
Rules are processed in order
List more specific rules before more general rules
If you want to hide the conversation id, you can do like this:
<page view-id="/search.xhtml">
<rewrite pattern="/search-{conversationId}" />
<rewrite pattern="/search" />
</page>
Now /search.seam?conversationId=16would be written as /search-16
If you want to match multiple pages use wildcards
<page login-required="true" view-id="/admin/*">
Hope this helps
Update
To answer your update question.
You can create wildcard rewriting with external rewriting but not with Seam's URL rewriting. With the view-based rewriting you would need to declare a pattern for each view id as you have described your self.
Sorry, but that just the way the cookie crumbles. :-)
yes, there is. Look at here.

Resources