How to rewrite directive on apache for anchor cms - php

I'm using a cms called anchor.
http://anchorcms.com/docs/getting-started/configuration
when I go to domain.com/posts
I get a 404,
when I go to domain.com/index.php/posts
page is displayed correctly.
this is my httpd.conf file
<VirtualHost *:443>
#ssl blah blah
DocumentRoot /var/www/anchor/
ServerName domain.com
ServerAlias domain.com
<Directory /var/www/anchor/anchor/>
AllowOverride All
Options Includes MultiViews
Require all granted
</Directory>
</VirtualHost>
this is my .htaccess file placed inside /var/www/anchor/
Options -indexes
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
# Allow any files or directories that exist to be displayed directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# Rewrite all other URLs to index.php/URL
RewriteRule ^(.*)$ index.php/$1 [L]
</IfModule>
<IfModule !mod_rewrite.c>
ErrorDocument 404 index.php
</IfModule>
I'm a little confused as how to configure this cms, the .htcaccess supposed to go in the "document root", which I'm fairly sure I put in the correct folder. I don't think I have to set the url to a sub directory. any tips?
here's my config file. /var/www/anchor/anchor/config/app.php
<?php
return array(
'url' => '/',
'index' => '',

Your document root is /var/www/anchor, but you only allow overrides on /var/www/anchor/anchor. If you're not globally allowing overrides, that would disable your htaccess file. Try changing your <Directory> tag to match the document root:
<Directory /var/www/anchor>
AllowOverride All
Options Includes MultiViews
Require all granted
</Directory>

Related

Hot to setup 2 different wordpress project with same domain on AWS Linux

currently i want to setup 2 different Wordpress project on my AWS Linux 2. but i still want to use a same domain. but i stuck.
1st Wordpress project use domain http://domainname.com
2nd wordpress project use domain http://domainname.com/second
what i have done is like this
1st Wordpress project
i set the .htaccess with this.. this setting is avoid 404 page when access http://domainname.com/second
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_URI} !^/second/.*$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ./ /index.php [L]
</IfModule>
i also create a file "domainname.conf" on folder "/etc/httpd/conf.d/" with this setting
<VirtualHost *:80>
ServerName domainname.com
ServerAdmin email#gmail.com
DocumentRoot "/var/php_apps/domainname"
<Directory "/var/php_apps/domainname">
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
Require all granted
</Directory>
ErrorLog /var/log/apache2/bar.error.log
LogLevel warn
CustomLog /var/log/apache2/bar.access.log combined
</VirtualHost>
this setting can load the page corretly. but i still can't display the 2nd wordpress project.. here is my setting
2nd Wordpress project
i set the .htaccess file with this
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
i create a file "second.conf" on folder "/etc/httpd/conf.d/" with this setting
<VirtualHost *:80>
ServerName domainname.com/second
ServerAdmin email#gmail.com
DocumentRoot "/var/php_apps/second"
<Directory "/var/php_apps/second">
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
Require all granted
</Directory>
ErrorLog /var/log/apache2/bar.error.log
LogLevel warn
CustomLog /var/log/apache2/bar.access.log combined
</VirtualHost>
but the 2nd wordpress project can't load the page when access domain http://domainname.com/second
error display
Not Found
The requested URL was not found on this server.
how do i able load the page from 2nd wordpress project when access domain http://domainname.com/second ?
please help.

Rewrite to another document root

I'm working on a new website which is supposed to replace an old one. The new website will use Phalcon and it's using its own routing system. The new website will be accessible using www.mydomain.com, like the previous one. The new website DocumentRoot is /var/www/mydomain-www, the old one is instead /var/www/mydomain-platform.
Inside this "platform" there are some "web services", that many other applications (included an iOS and an Android apps) are using. Unfortunately, the new website must use these web services as well. :-(
Basically there is a PHP file for each API call and all these files are located in the root of the old website, specifically /var/www/mydomain-platform. I know it's a mess but I have to deal with that, I have inherited it. In the old website root there is also a .htaccess file that contains a rewrite route for every single API call, to the right PHP file. They look like:
RewriteRule ^ws/event/games(.*)$ /ws_events.php$1
RewriteRule ^ws/favourites/list(.*)$ /ws_teams_favorites.php$1
I need to find a way to rewrite all the url for www.mydomain.com/ws/(.*) to the directory /var/www/mydomain-platform/ws, because the web services' files are there and I don't really want to move them in the root directory of the new website.
I thought to create a symlink var/www/mydomain.www/ws pointing to the directory /var/www/mydomain-platform/ws, but I'm sure the below vhost configuration will not like it, because it will redirect everything to /var/www/mydomain/public.
I would like to put these redirect stuff inside a .htaccess, and leave the vhost like it is.
Any idea?
<VirtualHost *:80>
ServerName www.mydomain.com
ServerAdmin dev#mydomain.co.uk
DocumentRoot "/var/www/mydomain-www"
ErrorLog "${APACHE_LOG_DIR}/www.mydomain.com-error_log"
CustomLog "${APACHE_LOG_DIR}/www.mydomain.com-access_log" common
AllowEncodedSlashes On
AddDefaultCharset UTF-8
<Directory /var/www/mydomain-www>
AuthType None
AllowOverride all
Require all granted
<IfModule rewrite_module>
RewriteEngine on
RewriteRule ^$ public/ [L]
RewriteRule ((?s).*) public/$1 [B,NE,L]
</IfModule>
</Directory>
<Directory /var/www/mydomain-www/public>
<IfModule rewrite_module>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^((?s).*)$ index.php?_url=/$1 [B,NE,QSA,L]
</IfModule>
</Directory>
<FilesMatch "(?i)\.php$">
Require all denied
</FilesMatch>
<FilesMatch "index\.php$">
Require all granted
</FilesMatch>
</VirtualHost>
You can move ws folder to /var/www/mydomain-www directory or create a symbolic link in the new directory. Then you need to change rule in /var/www/mydomain-www to skip anything with /ws/ in front:
<Directory /var/www/mydomain-www>
AuthType None
AllowOverride all
Require all granted
<IfModule rewrite_module>
RewriteEngine on
RewriteRule ^$ public/ [L]
RewriteRule ^/?((?!ws2/|ws3/).*)$ public/$1 [B,NE,L,NC]
</IfModule>
</Directory>

Rewrite subdirectory url to file

I have a subdirectory called test, http://www.mywebsite.com/test/. Inside of the directory is an index.php file.
I want to put an .htaccess file inside of the test subdirectory that will rewrite the URLs so that http://www.mywesbite.com/test/paul will become http://www.mywebsite.com/test?author=paul, and so that urls like http://www.mywebsite.ocom/test/sam/3 will become http://www.mywebsite.com/test?author=sam&test=3
This is what I have so far:
RewriteEngine On
Options +FollowSymlinks
RewriteCond %{REQUEST_URI} (/test/)
RewriteRule ^(.*)/(.*)/(.*)/?$ /test/index.php?author=$1&page=$2 [L]
RewriteCond %{REQUEST_URI} (/test/)
RewriteRule ^(.*)/(.*)/?$ /test/index.php?author=$1 [L]
Unfortunately, I get a 404 Not Found error. Am I missing something? Any thoughts are much appreciated!
EDIT: I checked phpinfo() and mod_rewrite does seem to be showing as a loaded module.
This is what my virtual host file looks like too. It looks like AllowOverride is set as well.
<VirtualHost *:80>
ServerName mywebsite.com
ServerAlias www.mywebsite.com
DocumentRoot /var/www/html/mywebsite.com/httpdocs
ErrorLog /var/log/apache2/mywebsite.com-error_log
CustomLog /var/log/apache2/mywebsite.com-access_log combined
HostnameLookups Off
UseCanonicalName Off
ServerSignature On
ScriptAlias /cgi-bin/ "/var/www/html/mywebsite.com/httpdocs/"
<Directory "/var/www/html/mywebsite.com/httpdocs/">
Options Indexes FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>
<IfModule mod_userdir.c>
UserDir public_html
Include /etc/apache2/mod_userdir.conf
</IfModule>
</VirtualHost>
EDIT 2: I also wanted to mention, I put some junk text in the .htaccess file to try and break it, and instead of a 404 error I got an internal server error, so it does seem like the .htaccess file is being read.
I tested Panama Jack's solution and it seems like the RewriteRules are not accounting for this already being in /test/.htaccess... so this would not work for the first example (/test/paul). Proposing an alternate solution that should work for both examples:
RewriteEngine On
RewriteBase /test/
RewriteRule ^(.+)/(.+)/?$ index.php?author=$1&page=$2 [L]
RewriteCond %{REQUEST_URI} !index\.php$
RewriteRule ^(.+)/?$ index.php?author=$1 [L]

Add real path in url rewriting

When I try to rewritte my URL, and access to test page ( test.php ) , in the url the real path is add, so, I have a 404 error.
http://mywebsite.fr/home/web/dev/test/ <- /home/web/ is the real path
and it can't add to the URL.
In my configuration, I have writting this :
<VirtualHost *:80>
ServerAdmin webmaster#localhost
ServerName *
ServerAlias *
DocumentRoot /home/web
<Directory />
Options FollowSymLinks
AllowOverride None
DirectoryIndex index.php
</Directory>
<Directory /home/web/>
Options Indexes FollowSymLinks
AllowOverride All
Order allow,deny
allow from all
DirectoryIndex index.php
</Directory>
In my htaccess :
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]
RewriteRule ^([^\.]+)$ $1.html [NC,L]
If you want to add extensions to your URLs like .php or .html then remove those shown rules from .htaccess and add this line:
Options +MultiViews
Option MultiViews is used by Apache's content negotiation module that runs before mod_rewrite and makes Apache server match extensions of files. So /file can be in URL but it will serve /file.php.

Defining Document Root in Apache2/Cake PhP

I have a broken Cake PHP site that I did not write, but am charged with fixing. I have the main controller up, however no css/js/images, and when I click a link I get a 404 not found. I believe something is incorrect with mod_rewrite or the docroot config in apache.
While reading through Cake documentation, I came across this:
"app/webroot
In a production setup, this folder should serve as the document root for your application. Folders here also serve as holding places for CSS stylesheets, images, and JavaScript files."
In my /etc/apache2/sites-enabled/this-site, I see this:
DocumentRoot /u02/data/docroots/this_site
<Directory /u02/data/docroots/this_site>
Options -Indexes
AllowOverride none
Order deny,allow
Allow from all
</Directory>
So, my question:
does the above config block need to have:
/u02/data/docroots/this_site/app/webroot as the DocumentRoot and ?
Anywhere else you can think to look for troubleshooting this?
Since you have access to edit the apache config files - it's most appropriate to make a standard production install.
Fixing the docroot
does the above config block need to have: .../app/webroot as the DocumentRoot
Assuming that path exists: yes.
This will fix the broken css/js/images.
Fixing mod rewrite
Put the rewrite rules in the virtual host config:
DocumentRoot /u02/data/docroots/this_site/app/webroot
<Directory /u02/data/docroots/this_site/app/webroot>
Options -Indexes
AllowOverride none
Order deny,allow
Allow from all
// added
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</Directory>
This will then route requests for anything that's not a file to the application.
Verify that the rewrite rule used is compatible with the version of CakePHP in use, the above is based on the rule for the latest release - it changed over the years and using the wrong rewrite rule may have unexpected side effects.
What's actually broken
AllowOverride none
This prevents the .htaccess files from being read by apache. If you were to change this to AllowOverride all, and assuming the currently-ignored .htaccess files exist, the site would work - but as a development install.
Try this:
<VirtualHost *:80>
ServerAdmin xxxxxx#test.ro
ServerName test.ro
ServerAlias www.test.ro
DirectoryIndex index.php
DocumentRoot /u02/data/docroots/this_site
ErrorLog /u02/data/docroots/this_site/error.log
CustomLog /u02/data/docroots/this_site/access.log combined
<Directory "/u02/data/docroots/this_site">
Options -Indexes FollowSymLinks MultiViews
AllowOverride AuthConfig FileInfo
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
And you should have 3 .htaccess files:
/u02/data/docroots/this_site/app/webroot/.htaccess
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
</IfModule>
/u02/data/docroots/this_site/app/.htaccess
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^$ webroot/ [L]
RewriteRule (.*) webroot/$1 [L]
</IfModule>
/u02/data/docroots/this_site/.htaccess
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^$ app/webroot/ [L]
RewriteRule (.*) app/webroot/$1 [L]
</IfModule>
Hope this helps ;)

Categories