Translating htaccess file to web_config / IIS - .htaccess

I have been driven around the bend trying to figure this out and I'm at the point I don't know what I am doing wrong and also what I am actually doing.
I have just moved from a Linux shared host running Plesk to a Dedi Windows server with Plesk installed on it. I have moved everything across files wise, DNS etc.
However, when I visited the sites I realised that when I navigated to a page which isn't the index it will give me a 404 error page. After some investigating, I realised that Plesk Linux uses Apache a.k.a .htaccess files compared to Windows Plesk using IIS a.k.a web_config file. I know my issue is that my new server isn't handling the exclusion of file extensions in the url. However, the issue I am having is I tried converting my below .htaccess files using this online converter into a web_config file however I keep getting internal server errors. I then read this solution which says you can import .htaccess code to use in the IIS manager however the IIS manager keeps giving errors or when it says everything is okay my websites still give the 404 error message.
If anyone can point me in the right direction it would be super helpful!
The two .htaccess files I use and trying to convert are as follows, also if they are messy blame my friend as he made them for me. One which denies looking at the directories, removing html, php file extensions and cache which can be seen below and the second is just a simple deny from all that I put into the directory where I am storing database connection details etc.
<IfModule mod_rewrite.c>
Options +FollowSymLinks
Options -MultiViews
RewriteEngine on
ErrorDocument 404 /404.php
# Remove www from any URLs that have them:
RewriteEngine on
# Three days for most static assets
<filesMatch ".(htaccess|css|jpg|jpeg|png|js|php|html)$">
<IfModule mod_headers.c>
Header set Cache-Control "max-age=604800, public, must-revalidate"
</IfModule>
</filesMatch>
Options All -Indexes
# deny access to evil robots site rippers offline browsers and other nasty scum
RewriteCond %{HTTP_USER_AGENT} ^Anarchie [OR]
RewriteCond %{HTTP_USER_AGENT} ^ASPSeek [OR]
RewriteCond %{HTTP_USER_AGENT} ^attach [OR]
RewriteCond %{HTTP_USER_AGENT} ^autoemailspider [OR]
RewriteCond %{HTTP_USER_AGENT} ^Xaldon\ WebSpider [OR]
RewriteCond %{HTTP_USER_AGENT} ^Xenu [OR]
RewriteCond %{HTTP_USER_AGENT} ^Zeus.*Webster [OR]
RewriteCond %{HTTP_USER_AGENT} ^Zeus
RewriteRule ^.* - [F,L]
RewriteRule ^index\.php$ / [R=301,L]
RewriteRule ^(.*)/index\.php$ /$1/ [R=301,L]
RewriteRule ^index\.html$ / [R=301,L]
RewriteRule ^(.*)/index\.html$ /$1/ [R=301,L]
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule !.*\.php$ %{REQUEST_FILENAME}.html [QSA,L]
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule !.*\.php$ %{REQUEST_FILENAME}.php [QSA,L]
<Files 403.shtml>
order allow,deny
allow from all
</Files>
Deny From All

you can use the below web.config code with your iis site:
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="RequestBlockingRule1" stopProcessing="true">
<match url=".*" />
<conditions>
<add input="{HTTP_USER_AGENT}" pattern="craftbot|download|extract|stripper|sucker|ninja|clshttp|webspider|leacher|collector|grabber|webpictures" />
</conditions>
<action type="CustomResponse" statusCode="403"
statusReason="Forbidden: Access is denied."
statusDescription="You do not have permission to view this page." />
</rule>
<rule name="rule 1" stopProcessing="true">
<match url="^(.*)/index\.php$" />
<action type="Rewrite" url="/{R:1}/" />
</rule>
<rule name="rule 2" stopProcessing="true">
<match url="^(.*)/index\.html$" />
<action type="Rewrite" url="/{R:1}/" />
</rule>
<rule name="rule 3" stopProcessing="true">
<match url="!.*\.html$" />
<action type="Rewrite" url="/%{REQUEST_FILENAME}.html" appendQueryString="true" />
</rule>
<rule name="rule 6q" stopProcessing="true">
<match url="!.*\.php$" />
<action type="Rewrite" url="/%{REQUEST_FILENAME}.php" appendQueryString="true" />
</rule>
</rules>
</rewrite>
<staticContent>
<clientCache cacheControlCustom="public" cacheControlMode="UseExpires"
httpExpires="Tue, 19 Jan 2012 03:14:07 GMT" />
</staticContent>
</system.webServer>
</configuration>
Update:
<rule name=”PHP Hiding”>
<match url=”(.*)” />
<conditions logicalGrouping=”MatchAll”>
<add input=”{REQUEST_FILENAME}” matchType=”IsFile” negate=”true” />
<add input=”{REQUEST_FILENAME}” matchType=”IsDirectory” negate=”true” />
</conditions>
<action type=”Rewrite” url=”{R:1}.php” />
Note: you can modify the values based on your requirement.

Related

HTTPS redirect in .htaccess is causing infinite redirect loop

I'm trying to redirect all HTTP urls to HTTPS using the following in .htaccess:
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
However it just causes an infinite redirect loop. There is a valid SSL certificate and the website is written in asp.net in case it matters. Google chrome automatically redirects to https, but firefox and edge do not so I need to add this rule. The only way I can get the site to load in https is if I explicitly type https:// in the address. What's the possible cause here?
IIS does not support .htaccess file.so I suggest you use iis URL rewrite module and add a rule using that.
for that, you need to install the URL rewrite module by using the web platform installer or from this below link.
https://www.iis.net/downloads/microsoft/url-rewrite
than add below code in your config file:
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="HTTP to HTTPS" enabled="true" stopProcessing="true">
<match url="(.*)" />
<conditions>
<add input="{HTTPS}" pattern="off" />
</conditions>
<action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" redirectType="Permanent"/>
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
for more detail you could refer this below link:
https://stackoverflow.com/a/55531655/11147346
RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://yourwebsite.com/$1 [R,L]
try that
or use cloudflare to cache and perfomace your project
https://support.cloudflare.com/hc/en-us/articles/115000219871-Troubleshooting-redirect-loop-errors
https://community.cloudflare.com/t/cloudflare-flexible-ssl-is-it-worth-it/28043
https://developers.cloudflare.com/ssl/origin/ssl-modes/

asp htaccess 301 redirect

I'm trying to redirect 3 pages but for some reason, it doens't seem to work. Site is built with asp
<IfModule mod_rewrite.c>
# Make sure directory listing is disabled
Options +FollowSymLinks -Indexes
RewriteEngine on
# Re-write for PDFs requests not pre-pended with /pdf/ I.E. in the root - prepend /pdf/ - Use negative look-ahead - If the file doesn't exist you get a 500 though sadly.
RewriteCond %{REQUEST_URI} ^/(?!pdf/)(.*)\.(pdf)$
RewriteCond %{DOCUMENT_ROOT}/pdf/$1 -f
RewriteRule ^(.*)$ /pdf/$1 [L]
# If the URI is not in /images,/pdf,/css, or /js let the handler process it
RewriteCond %{REQUEST_URI} !^(/images/|/pdf/|/css/|/js/)
RewriteCond %{REQUEST_FILENAME} !handler.php
RewriteRule ^(.*)$ handler.php/$1 [L]
# If the URI IS in the above directories but the file doesn't exist run it through the handler as well
RewriteCond %{REQUEST_URI} ^(/images/|/pdf/|/css/|/js/)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ handler.php/$1 [L]
# Permanent URL redirect
Redirect 301 /Server_Rack_Cabinet_RS_42U.asp http://www.rackmountsolutions.net/cruxial-core-1000-series-server-rack.asp
Redirect 301 /Sound_Dampening_Proof_Server_Rack.asp http://www.rackmountsolutions.net/AcoustiQuiet_Soundproof_Server_Rack.asp
Redirect 301 /Relay_Rack_4_post.asp http://www.rackmountsolutions.net/4_Post_Server_Rack.asp
</IfModule>
The # Permanent URL redirect portion doesn't seem to work. The above is the entire code I have in the .htaccess file.
Since this site is running on an IIS server, there was a web.config file overruling the .htaccess file somehow. See the to see how i did it. The web.config file was in my site's root folder.
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="Env-leader-redirect1" patternSyntax="ECMAScript" stopProcessing="true">
<match url="^Server_Rack_Cabinet_RS_42U.asp" />
<conditions>
<add input="{HTTP_HOST}" pattern="^www\.rackmountsolutions\.net$" />
</conditions>
<action type="Redirect" url="http://www.rackmountsolutions.net/cruxial-core-1000-series-server-rack.asp" />
</rule>
<rule name="Env-leader-redirect2" patternSyntax="ECMAScript" stopProcessing="true">
<match url="^Server_Rack_Cabinet_RS_42U.asp" />
<conditions>
<add input="{HTTP_HOST}" pattern="^www\.rackmountsolutions\.net$" />
</conditions>
<action type="Redirect" url="http://www.rackmountsolutions.net/cruxial-core-1000-series-server-rack.asp" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>

Rewrite rule conversion to web.config

Could anyone tell me how what the conversion of the below rewrite would be for a web.config file?
RewriteEngine On
RewriteRule ^/(credits|content)/?$ switch.php?view=$1
Or if there is any online conversion tool that would be great.
Thanks
EDIT
For example:
RewriteCond %{HTTP_HOST} ^example\.com$ [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301]
Would be:
<rewrite>
<rules>
<rule name="Imported Rule 1" stopProcessing="true">
<match url="^(.*)$" ignoreCase="false" />
<conditions>
<add input="{HTTP_HOST}" pattern="^example\.com$" />
</conditions>
<action type="Redirect" redirectType="Permanent" url="http://www.example.com/{R:1}" />
</rule>
</rules>
</rewrite>
I can't tell you exactly how to convert the rules you have provided (I'm not great with .htaccess or web.config unfortunately), but there is a handy tool built into IIS Manager that enables you to convert .htaccess rewrite rules into IIS URL rewrite rules.
It's usage is described here:
http://www.iis.net/learn/extensions/url-rewrite-module/importing-apache-modrewrite-rules
This would convert 2 kind of incoming URLs like this:
http[s]://yoursite.com/credits => switch.php.view=credits
http[s]://yoursite.com/credits/ => switch.php.view=credits
http[s]://yoursite.com/content => switch.php.view=content
http[s]://yoursite.com/content/ => switch.php.view=content
Nb: this rule doesn't keep parameters in the URLs e.g.:
http[s]://yoursite.com/credits?param1=aa&param2=bb => switch.php.view=credits
http[s]://yoursite.com/credits/?param1=aa&param2=bb => switch.php.view=credits
http[s]://yoursite.com/content?param1=aa&param2=bb => switch.php.view=content
http[s]://yoursite.com/content/?param1=aa&param2=bb => switch.php.view=content

Converting web.config Url rewrite to .htaccess

I have switched from a Windows Server 2008 R2 running IIS7.5 to CentOS server running Apache2, as I had performance problems with PHP.
My main site's Web.config uses url rewrite and needs to be converted. It has been a while since I last used .htaccess files.
My Web.Config rewrite code:
<rule name="IndexRewrite" stopProcessing="true">
<match url="^([^/]+)/?$" />
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
</conditions>
<action type="Rewrite" url="index.php?p={R:1}" />
</rule>
So what it does is Rewriting the ?p= That is used by PHP to display the appropriate page.
So, how exactly can this be done? I am not familiar with mod_rewrite in Apache2.
I tried to modify a rewrite rule from another site using SocialEngine, nut no luck.
<IfModule mod_rewrite.c>
Options +FollowSymLinks
RewriteEngine On
# Get rid of index.php
RewriteCond %{REQUEST_URI} /index\.php
RewriteRule (.*) index.php?p= [L,QSA]
# Rewrite all directory-looking urls
RewriteCond %{REQUEST_URI} /$
RewriteRule (.*) index.php?p= [L,QSA]
</IfModule>
Example of the link:
http://example.com?p=about
Should be
http://example.com/about
That's how it was before when I used IIS7.5 Url rewrite.
Any help?
I have successfully converted it to a working .htaccess mod_rewrite code.
It seems easier than it is. I had to search deeper in Google and found a working toturial.
Here's the code that I use now.
RewriteEngine On
RewriteBase /
RewriteRule ^([A-z]+)$ /index.php?p=$1
So this is solved. ;)

IIS Remove Subdirectory from urls - web.config & .htaccess

I've asked question before but haven't found solution. So I'm posting again with some additional infos. I've tried to move all file to root from sub-directory called (Silverstripe), but then blank page showed up. even i delete default.aspx and web.config file too. and also played with .htaccess file. and I'm not much awar of these stuff, so this is why i posted my issue here.
The Problem is I want to remove sub-directory from url & permalinks as well. e.g.
http://www.jtrainingsolutions.com/Silverstripe/ => http://www.jtrainingsolutions.com/
Root Map:
- /Silverstripe - (Subdirectory)
- root/Silverstripe/.htaccess
- root/Silverstripe/web.config
- root/and other Silverstripe CMS files
- /default.aspx
default.aspx:
<%
If InStr( UCase(Request.ServerVariables("SERVER_NAME")), UCase("www.jtrainingsolutions.com") ) > 0 Then
Response.Redirect("/Silverstripe")
ElseIf InStr( UCase(Request.ServerVariables("SERVER_NAME")), UCase("jtrainingsolutions.com") ) > 0 Then
Response.Redirect("/Silverstripe")
End If
%>
.htaccess file:
### SILVERSTRIPE START ###
<Files *.ss>
Order deny,allow
Deny from all
Allow from 127.0.0.1
</Files>
<Files web.config>
Order deny,allow
Deny from all
</Files>
ErrorDocument 404 /assets/error-404.html
ErrorDocument 500 /assets/error-500.html
<IfModule mod_alias.c>
RedirectMatch 403 /silverstripe-cache(/|$)
</IfModule>
<IfModule mod_rewrite.c>
SetEnv HTTP_MOD_REWRITE On
RewriteEngine On
RewriteCond %{REQUEST_URI} !(\.gif$)|(\.jpg$)|(\.png$)|(\.css$)|(\.js$)|(\.php$)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.*)$ Silverstripe/$1 [L]
RewriteBase /Silverstripe
</IfModule>
### SILVERSTRIPE END ###
and web.config file:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<security>
<requestFiltering>
<hiddenSegments applyToWebDAV="false">
<add segment="silverstripe-cache" />
</hiddenSegments>
</requestFiltering>
</security>
<rewrite>
<rules>
<rule name="SilverStripe Clean URLs" stopProcessing="true">
<match url="^(.*)$" />
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
</conditions>
<action type="Rewrite" url="sapphire/main.php?url={R:1}" appendQueryString="false" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
Please advise me how to fix this issue. thanks in advance.

Resources