I want to edit a web application's config at runtime, specifically the file that is referenced by a configSource attribute. Whenever I try to open the file using the WebConfigurationManager, I always get the web.config, not rewrite.config.
Once I get it open, I want to edit it (e.g. clear out existing entries, add new entries) and save it back out to rewrite.config.
Am I better off just reading it in as a file (e.g. System.IO)
web.config
<system.webServer>
<rewrite>
<rules configSource="rewrite.config" />
</rewrite>
rewrite.config
<rules>
<rule name="rewrite1" stopProcessing="true">
<match url="^contact-us.html$" />
<action type="Rewrite" url="/contact-us" />
</rule>
<rule name="rewrite2" stopProcessing="true">
<match url="^about-us.html$" />
<action type="Rewrite" url="/about-us" />
</rule>
</rules>
Related
I have an ASP.Net website, but several domain names are pointing to the same website.
so for example lets say i have following domains
www.myMainDomain.com
www.mySite1.com
www.mySite2.com
I have 1 actual website with all the pages and subpages i want to have.
www.myMainDomain.com
www.myMainDomain.com/site1
www.myMainDomain.com/site1/products
www.myMainDomain.com/site2
www.myMainDomain.com/site2/products
...
So i would like to have a rewrite rule in my web.config
so that if the user is coming from the www.myMainDomain.com, it is just the normal site as it is existing
but if they are coming from www.mySite1.com, the rewrite rule should kind of take them to www.myMainDomain.com/site1, and if they go to a subpage, like products, it is always rewritten so like this
www.mySite1.com -> www.myMainDomain.com/site1
www.mySite1.com/products -> www.myMainDomain.com/site1/products
I have something like that, but this is not working, and it is actually causing a 500 Error
<system.webServer>
<rewrite xdt:Transform="Insert">
<rules>
<rule name="Root Hit Redirect" stopProcessing="true">
<match url="^$" />
<action type="Redirect" url="/site1/{R:1}" appendQueryString="true" />
</rule>
</rules>
</rewrite>
</system.webServer>
What could be a correct solution?
I think you could use the inverse of standard canonicalhostname redirect with some changes:
<rule name="CanonicalHostNameRule_Mod" stopProcessing="true">
<match url="(.*)" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
<add input="{HTTP_HOST}" pattern="^www\.mySite1\.com$" />
</conditions>
<action type="Redirect" url="http://www.myMainDomain.com/site1/{R:1}" />
</rule>
In this way you have to make a rule for each secondary domain.
i want to rewrite url name from WebConfig file..I have old url like this
http://www.exmaple.com/'blogdetails'/some name/10082
Now my url is being changed to
http://www.exmaple.com/blog/details/some name/10082.
blogdetails is being chnaged to blog/Details..
Actually i waana redirect the url page when url will find a keyword 'blogdetails'..It will redirect to http://exmaple.com/blog page..i want to do this from web config file..
example like if i enter the old url like http://www.exmaple.com/'blogdetails'/somename/10082
this link contain "blogdetails" it will redirect to http://www.exmaple.com/blog.
i already got some code from internet some thing like..cause new link is being changed to blog/details..i dont wanna redirect to new link i just wanna redirect to this link something like this:- http://www.exmaple.com/blog
<system.webServer>
<rewrite>
<rules>
<rule name="SpecificRewrite" stopProcessing="true">
<match url="^blogdetails$" />
<action type="Rewrite" url="blog" />
</rule>
</rules>
</rewrite>
</system.webServer>
how to do this???can anyone help me please?????
If you are expecting blogdetails to always be at the root, I think this might work:
^blogdetails.*$
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="SpecificRewrite" patternSyntax="Wildcard" stopProcessing="true">
<match url=“^en/blogdetails$" />
<action type="Rewrite" url=“blog” />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
Try this one.This should work.
I have to route all the requests on my site from http to https, I was succesfull in doing that by adding another class in Global.Asax.Cs
// working part for redirecting http into https
protected void Application_BeginRequest()
{
if (!Context.Request.IsSecureConnection)
Response.Redirect(Context.Request.Url.ToString().Replace("http:", "https:"));
}
But before that I tried by inserting Rules into WebConfig
<rewrite>
<rules>
<rule name="Redirect HTTP to HTTPS" stopProcessing="true">
<match url="(.*)"/>
<conditions>
<add input="{HTTPS}" pattern="^OFF$"/>
</conditions>
<action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="SeeOther"/>
</rule>
</rules>
</rewrite>
Which is not working, But I have seen many posts here which say that Rules is the best way to route request, I have also installed URL Rewrite on my server . Cany any one please suggest why it wasnt working ( i am getting 500 internal server error).
Does rerouting in Global.asax affect performance when there is a huge volume of requests.
Please advice
I use this rule and it works like a charm:
<system.webServer>
<rewrite>
<rules>
<rule name="HTTP to HTTPS redirect" stopProcessing="true">
<match url="(.*)" ignoreCase="true" />
<conditions>
<add input="{HTTPS}" pattern="off" ignoreCase="true" />
</conditions>
<action type="Redirect" redirectType="Permanent" url="https://{HTTP_HOST}/{R:1}" />
</rule>
</rules>
</rewrite>
</system.webServer>
without any datailed info about the error i can only guess that your web.config is malformed or you put the rule section in the wrong place or URL Rewrite Module is not installed correctly
i am trying to create a custom servervariable with url rewrite.
Url Rewrite for IIS generates the following config entry
<rewrite>
<rules>
<rule name="CName to URL - Rewrite" stopProcessing="true">
<match url=".*" />
<conditions>
<add input="{HTTP_HOST}" pattern="^(?!www)(.*)\.localfurnco\.de" />
</conditions>
<action type="Rewrite" url="?" appendQueryString="false" />
<serverVariables>
<set name="HTTP_MANUFACTURER" value="{C:1}" />
</serverVariables>
</rule>
</rules>
</rewrite>
But when iterating through the servervariables i can't find HTTP_MANUFACTURER.
The url rewrite seems to work but i can't get the Variable.
I am trying to call the address: test.localfurnco.de/subdir/webservice.asmx?wsdl.
C:1 should in this case be: "test".
I would be grateful for any suggestion and
thanks in advance
After trying some hours i figured it out myself.
Here is the resulting rule.
<rule name="CName to URL - Rewrite" stopProcessing="false">
<match url=".*" negate="false" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="true">
<add input="{SERVER_NAME}" pattern="^(?!www)(.*)\.localfurnco\.de" />
</conditions>
<action type="Rewrite" url="?CustomValue={C:1}" logRewrittenUrl="true" />
<serverVariables>
<set name="HTTP_MANUFACTURER" value="{C:1}" />
</serverVariables>
</rule>
With this rule it is possible to access the ServerVariable "HTTP_MANUFACTURER" from C#:
string variable= httpContext.Current.Request.ServerVariables.Get("HTTP_MANUFACTURER");
A Different option a friend shared with me is this:
string value= HttpContext.Current.Request.Params.Get("CustomValue");
As you can see i rewrite the url and set a parameter which i assign the, by the pattern, filtered value.
I hope this helps somebody else.
I want to modify rewrite rule from C# code. Url Rewrite rule is resides in web.config file.
<system.webServer>
<rewrite>
<rules>
<rule name="partners">
<match url="^partners$" />
<action type="Rewrite"
url="partners.aspx" />
</rule>
<rule name="news">
<match url="^news$" />
<action type="Rewrite"
url="news.aspx" />
</rule>
<rule name="projects">
<match url="^projects$" />
<action type="Rewrite"
url="projects.aspx" />
</rule>
</rules>
</rewrite>
</system.webServer>
I want to change for ex. <rule name="partners"> <match url="^partners$" /> to <rule name="partners"> <match url="^friendship/partners$" />,
how can I find node rule and update match url to "new one" where name = "partners";?
this is my idea for dynamic url rewriting. thanks for any other ways if you have.
I change value for connectionString in my web.config website with this code :
May be this example can help you (just change the value connectionString by system.webServer and add by rules etc..
Please tell me if it works for you
XmlDocument myXmlDocument = new XmlDocument();
myXmlDocument.Load("../myPath/web.config");
foreach (XmlNode node in myXmlDocument["configuration"]["connectionStrings"])
{
if (node.Name == "add")
{
if (node.Attributes.GetNamedItem("name").Value == "SCI2ConnectionString")
{
node.Attributes.GetNamedItem("connectionString").Value = "new value";
}
}
}
step 1:- download urlrewrite2.exe Here
Step 2:- write you logic in web.config
<system.webServer>
<rewrite>
<providers>
<provider name="FileMap" type="FileMapProvider, Microsoft.Web.Iis.Rewrite.Providers, Version=7.1.761.0, Culture=neutral, PublicKeyToken=0545b0627da60a5f">
<settings>
<add key="FilePath" value="D:\j\branches\JuzBuzz\App_Data\rewriteurl.txt" />
<add key="IgnoreCase" value="1" />
<add key="Separator" value="," />
</settings>
</provider>
</providers>
<rules>
<rule name="FileMapProviderTest" stopProcessing="true">
<match url="(.*)" ignoreCase="false" />
<conditions logicalGrouping="MatchAll">
<add input="{FileMap:{R:1}}" pattern="(.+)" ignoreCase="false" />
</conditions>
<action type="Rewrite" url="{C:1}" appendQueryString="false" />
</rule>
</rules>
</rewrite>
</system.webServer>
step 3:- Put you .txt file in App_Code folder or another place for which you have given the address in web.config , txt file will have data like
**technology,expert/search-expert.aspx?CatId=1
counselling-personal-growth,expert/search-expert.aspx?CatId=2** etc**
Microsoft has Microsoft.Web.Administration.dll available to help you out, but it requires administrator permissions to execute,
https://www.iis.net/learn/manage/scripting/how-to-use-microsoftwebadministration
It is quite suitable for a WinForms application (such as IIS Manager) to control an IIS server, but can also be used in other types of applications.
I do have a personal project that is a custom MWA implementation that works for some non-administrator cases. If you are interested in it, let me know.