Where do I need to edit and put the rewrite mod in elgg?
The Server is hosted on II7 at Goddady. I need help with elgg error
"You need to configure your web server with Elgg's rewrite rules and try again"
Here is what I have done so far by editing the htaccess_dist file.
My Example:
# Elgg htaccess directives
<Files "htaccess_dist">
order allow,deny
deny from all
</Files>
# Don't allow listing directories
Options -Indexes
# Follow symbolic links
Options +FollowSymLinks
# Default handler
DirectoryIndex index.php
############################
# BROWSER CACHING
# The expires module controls the Expires and Cache-Control headers. Elgg sets
# these for dynamically generated files so this is just for static files.
<IfModule mod_expires.c>
ExpiresActive On
ExpiresDefault "access plus 1 year"
</IfModule>
# Conditional requests are controlled through Last-Modified and ETag headers.
# Elgg sets these on dynamically generated cacheable files so this is just for
# static files. Note: Apache sends Last-Modified by default on static files so
# I don't think we need to be sending ETag for these files.
<FilesMatch "\.(jpg|jpeg|gif|png|mp3|flv|mov|avi|3pg|html|htm|swf|js|css|ico)$">
FileETag MTime Size
</FilesMatch>
############################
# PHP SETTINGS
<IfModule mod_php5.c>
# limit the maximum memory consumed by the php script to 64 MB
php_value memory_limit 64M
# register_globals is deprecated as of PHP 5.3.0 - disable it for security reasons.
php_value register_globals 0
# post_max_size is the maximum size of ALL the data that is POST'ed to php at a time (8 MB)
php_value post_max_size 8388608
# upload_max_filesize is the maximum size of a single uploaded file (5 MB)
php_value upload_max_filesize 5242880
# on development servers, set to 1 to display errors. Set to 0 on production servers.
php_value display_errors 0
</IfModule>
############################
# COMPRESSION
# Turn on mod_gzip if available
<IfModule mod_gzip.c>
mod_gzip_on yes
mod_gzip_dechunk yes
mod_gzip_keep_workfiles No
mod_gzip_minimum_file_size 1000
mod_gzip_maximum_file_size 1000000
mod_gzip_maximum_inmem_size 1000000
mod_gzip_item_include mime ^text/.*
mod_gzip_item_include mime ^application/javascript$
mod_gzip_item_include mime ^application/x-javascript$
# Exclude old browsers and images since IE has trouble with this
mod_gzip_item_exclude reqheader "User-Agent: .*Mozilla/4\..*\["
mod_gzip_item_exclude mime ^image/.*
</IfModule>
## Apache2 deflate support if available
##
## Important note: mod_headers is required for correct functioning across proxies.
##
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/javascript application/x-javascript
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.[0678] no-gzip
BrowserMatch \bMSIE !no-gzip
<IfModule mod_headers.c>
Header append Vary User-Agent env=!dont-vary
</IfModule>
# The following is to disable compression for actions. The reason being is that these
# may offer direct downloads which (since the initial request comes in as text/html and headers
# get changed in the script) get double compressed and become unusable when downloaded by IE.
SetEnvIfNoCase Request_URI action\/* no-gzip dont-vary
SetEnvIfNoCase Request_URI actions\/* no-gzip dont-vary
</IfModule>
############################
# REWRITE RULES
<IfModule mod_rewrite.c>
RewriteEngine on
# If Elgg is in a subdirectory on your site, you might need to add a RewriteBase line
# containing the path from your site root to elgg's root. e.g. If your site is
# http://example.com/ and Elgg is in http://example.com/sites/elgg/, you might need
#
# My example
RewriteBase http://www.the_website_url.com/elgg/
<rewrite>
<rules>
<rule name="Imported Rule 1">
<match url="="^action/([A-Za-z0-9_/-]+)$" ignoreCase="false" />
<action type="Rewrite" url="engine/handlers/action_handler.php?action={R:1}&{QUERY_STRING}" />
</rule>
<rule name="Imported Rule 2">
<match url="^services/api/([A-Za-z0-9_-]+)/(.*)$" ignoreCase="false" />
<action type="Rewrite" url="engine/handlers/service_handler.php?handler={R:1}&request={R:2}&{QUERY_STRING}"
appendQueryString="false" />
</rule>
<rule name="Imported Rule 3">
<match url="^export/([A-Za-z]+)/([0-9]+)$" ignoreCase="false" />
<action type="Rewrite" url="services/export/handler.php?view={R:1}&guid={R:2}" appendQueryString="false" />
</rule>
<rule name="Imported Rule 4">
<match url="^export/([A-Za-z]+)/([0-9]+)/$" ignoreCase="false" />
<action type="Rewrite" url="services/export/handler.php?view={R:1}&guid={R:2}" appendQueryString="false" />
</rule>
<rule name="Imported Rule 5">
<match url="^export/([A-Za-z]+)/([0-9]+)/([A-Za-z]+)/([A-Za-z0-9_]+)/$" ignoreCase="false" />
<action type="Rewrite" url="services/export/handler.php?view={R:1}&guid={R:2}&type={R:3}&idname={R:4}"
appendQueryString="false" />
</rule>
<rule name="Imported Rule 6">
<match url="^_css/css.css$" ignoreCase="false" />
<action type="Rewrite" url="_css/css.php" />
</rule>
<rule name="Imported Rule 7">
<match url="^pg/([A-Za-z0-9_-]+)/(.*)$" ignoreCase="false" />
<action type="Rewrite" url="engine/handlers/pagehandler.php?handler={R:1}&page={R:2}&{QUERY_STRING}"
appendQueryString="false" />
</rule>
<rule name="Imported Rule 8">
<match url="^pg/([A-Za-z0-9_-]+)$" ignoreCase="false" />
<action type="Rewrite" url="engine/handlers/pagehandler.php?handler={R:1}&{QUERY_STRING}" appendQueryString="false"
/>
</rule>
<rule name="Imported Rule 9">
<match url="xml-rpc.php" ignoreCase="false" />
<action type="Rewrite" url="engine/handlers/xml-rpc_handler.php" />
</rule>
<rule name="Imported Rule 10">
<match url="mt/mt-xmlrpc.cgi" ignoreCase="false" />
<action type="Rewrite" url="engine/handlers/xml-rpc_handler.php" />
</rule>
<rule name="Imported Rule 11">
<match url="^tag/(.+)/?$" ignoreCase="false" />
<action type="Rewrite" url="engine/handlers/pagehandler.php?handler=search&page={R:1}" appendQueryString="false" />
</rule>
</rules>
</rewrite>
#
# here, only without the # in front.
#
# If you're not running Elgg in a subdirectory on your site, but still getting lots
# of 404 errors beyond the front page, you could instead try:
#
#RewriteBase /
# If your users receive the message "Sorry, logging in from a different domain is not permitted"
# you must make sure your login form is served from the same hostname as your site pages.
# See http://docs.elgg.org/wiki/Login_token_mismatch_error for more info.
#
# If you must add RewriteRules to change hostname, add them directly below (above all the others)
# In for backwards compatibility
RewriteRule ^pg\/([A-Za-z0-9\_\-]+)$ engine/handlers/page_handler.php?handler=$1&%{QUERY_STRING} [L]
RewriteRule ^pg\/([A-Za-z0-9\_\-]+)\/(.*)$ engine/handlers/page_handler.php?handler=$1&page=$2&%{QUERY_STRING} [L]
RewriteRule ^tag\/(.+)\/?$ engine/handlers/page_handler.php?handler=search&page=$1 [L]
RewriteRule ^action\/([A-Za-z0-9\_\-\/]+)$ engine/handlers/action_handler.php?action=$1&%{QUERY_STRING} [L]
RewriteRule ^cache\/(.*)$ engine/handlers/cache_handler.php?request=$1&%{QUERY_STRING} [L]
RewriteRule ^services\/api\/([A-Za-z0-9\_\-]+)\/(.*)$ engine/handlers/service_handler.php?handler=$1&request=$2&%{QUERY_STRING} [L]
RewriteRule ^export\/([A-Za-z]+)\/([0-9]+)\/?$ engine/handlers/export_handler.php?view=$1&guid=$2 [L]
RewriteRule ^export\/([A-Za-z]+)\/([0-9]+)\/([A-Za-z]+)\/([A-Za-z0-9\_]+)\/$ engine/handlers/export_handler.php?
view=$1&guid=$2&type=$3&idname=$4 [L]
RewriteRule xml-rpc.php engine/handlers/xml-rpc_handler.php [L]
RewriteRule mt/mt-xmlrpc.cgi engine/handlers/xml-rpc_handler.php [L]
# rule for rewrite module test during install - can be removed after installation
RewriteRule ^rewrite.php$ install.php [L]
# Everything else that isn't a file gets routed through the page handler
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([A-Za-z0-9\_\-]+)$ engine/handlers/page_handler.php?handler=$1 [QSA,L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([A-Za-z0-9\_\-]+)\/(.*)$ engine/handlers/page_handler.php? handler=$1&page=$2 [QSA,L]
</IfModule>
I'm also running elgg on IIS 7.5, and had a lot of trouble setting it up, untill I found this post: http://community.elgg.org/discussion/view/486696/elgg-on-iis-7
This should get you going:
1) Install the IIS URL Rewrite module: http://www.iis.net/download/urlrewrite
2) Open the IIS Manager in Control Panel > Administrative Tools
3) Right-Click on your Elgg site and select "Switch to Features View" if not already there.
4) Open the URL Rewrite Feature and click "Import Rules..." in the actions menu.
5) Browse for a configuration file... Open the "htaccess_dist" file located in the root directory of your elgg site.
6) Under each rule there is a match tag. The tags contain regular expressions. Most regular expressions will generate an error because IIS is interpreting them differently than Apache would. There is a simple fix. In every instance you see "_" remove the slash. It is an escape character for the underscore. This isn't necessary for IIS and will generate an error. Be sure to remove it anytime you see it before the underscore, there should be 7 instance as far as I can remember.
8) In the actions menu on the right, hit apply.
It wil be saved as a webconfig file n the root of elgg installation.
That's it! Elgg should now work on IIS.
.htaccess file is specific to Apache server. If you want to use IIS server, you need to port rewrite rules to their format.
Have a look at some old rules for Elgg 1.7: http://docs.elgg.org/wiki/Elgg_and_IIS You'd need to port rules for Elgg 1.8.
Related
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.
In IIS, RewriteBase is not working. So the below .htaccess rule has been converted as an IIS web config. But in IIS it is giving 400 Bad Request error. What do I need to correct?
Htaccess Rule
RewriteRule api/(.*)$ api.php?request=$1 [QSA,NC,L]
IIS Converted Rule
<rule name="Imported Rule 1" stopProcessing="true">
<match url="api/(.*)$"/>
<action type="Rewrite" url="api.php?request={R:1}" appendQueryString="true"/>
</rule>
Assuming your RewriteBase directive is set like this:
RewriteBase /subdir
Then you simply need to append this "prefix" to the start of the target URL (ie. RewriteRule substitution or url attribute value in the IIS directive). Specifically, it should be prefixed only to relative substitution strings.
For example:
RewriteRule api/(.*)$ /subdir/api.php?request=$1 [QSA,NC,L]
In other words:
<action type="Rewrite" url="/subdir/api.php?request={R:1}" appendQueryString="true"/>
If RewriteBase / is set then just prefix with a single slash, eg. url="/api.php?request={R:1}"
That's all that RewriteBase directive does. It sets the URL-prefix for relative path substitutions when used in a directory context.
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>
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. ;)
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.