Failing miserably with .htaccess rewrite, unsure how to troubleshoot - .htaccess

I have been trying to figure out URL rewriting on my local development site all day with no luck. Initially the .htaccess files were ignored. Now they are being read but not working. I don't know how to troubleshoot an .htaccess file though. From what I have read, it seems Apache 2.4 got rid of specifying your own RewriteLog. The only help I am getting is from /var/log/apache2/error.log which is all Greek to me.
The rewrite I am attempting is simply:
local.domain.com/users/index.php?id=1 -> local.domain.com/users/1/
My .htaccess looks like:
RewriteEngine On
RewriteRule ^users/([0-9]+)/?$ users/index.php?id=$1 [NC,L]
When requesting local.domain.com/users/index.php?id=1 , the URL remains unchanged. The error.log for apache gives the following 3 lines:
[Tue Jun 17 15:20:04.705939 2014] [rewrite:trace3] [pid 6569] mod_rewrite.c(468): [client 127.0.0.1:46208] 127.0.0.1 - - [local.domain.com/sid#b63f02c0][rid#b6b12058/initial] [perdir /var/www/vhosts/domain.com/] strip per-dir prefix: /var/www/vhosts/domain.com/users/index.php -> users/index.php
[Tue Jun 17 15:20:04.705979 2014] [rewrite:trace3] [pid 6569] mod_rewrite.c(468): [client 127.0.0.1:46208] 127.0.0.1 - - [local.domain.com/sid#b63f02c0][rid#b6b12058/initial] [perdir /var/www/vhosts/domain.com/] applying pattern '^users/([0-9]+)$' to uri 'users/index.php'
[Tue Jun 17 15:20:04.705990 2014] [rewrite:trace1] [pid 6569] mod_rewrite.c(468): [client 127.0.0.1:46208] 127.0.0.1 - - [local.domain.com/sid#b63f02c0][rid#b6b12058/initial] [perdir /var/www/vhosts/domain.com/] pass through /var/www/vhosts/domain.com/users/index.php
The location of the .htaccess is /var/www/vhosts/domain.com/ . Is there a way to get better/more log info? Is the /var/log/apache2/error.log really the log I should be using for this? Is the problem really with my .htaccess code or is there some sort of configuration I am missing or something? I know there are similar questions but so far I haven't found one that was both understandable and a solution to my problem.
Thanks in advance!

You are rewriting an incoming URI /users/1/ to /users/index.php?id=1 (SEO form to dynamic form). Your .htaccess looks correct for that (I assume it's in the root).
Are you sure that your Apache server is built with the RewriteEngine enabled? Are you overlooking an error message? Your typed-in URI is /users/1/?

You regex is looking for [0+9]+ which means it is looking for numbers after /users. In your input url (assuming that's your input url), /var/www/vhosts/domain.com/users/index.php there is no numbers after `'/users'
Put a number after users like /users/55555/ and see what happens.

Related

how can i separate the mainDomain and the subDomains use mod-rewrite with htaccess file

I want to redirect subdomains on my site if they are queried, but if I do not query, I want to redirect it to a different domain.
I have reached some codes by searching the internet, but I have not improved.
If I can not tell what I want to do, I want the following url and file structure to be the same as I showed.
public_html/
|____.htaccess (main htaccess)
|____index.php (php empty)
|____mainDomain/
| |_____.htaccess (without subdomain htaccess)
| |_____index.php
| |_____public/
| | |____.htaccess (application htaccess)
| | |____index.php
|____subsDomain/
| |_____ucgen/
| |_____testFolder/
main htaccess:
RewriteCond %{ENV:REDIRECT_SUBDOMAIN} =""
RewriteCond %{HTTP_HOST} ^([a-z0-9][-a-z0-9]+)\.metehanboy\.com\.?(:80)?$ [NC]
RewriteCond %{DOCUMENT_ROOT}/subsDomain/%1 -d
RewriteRule ^(.*) subsDomain/%1/$1 [E=SUBDOMAIN:%1,L]
RewriteRule ^ - [E=SUBDOMAIN:%{ENV:REDIRECT_SUBDOMAIN},L]
RewriteRule ^$ mainDomain/ [L]
RewriteRule (.*) mainDomain/$1 [QSA,L]
without subdomain htaccess
RewriteEngine on
RewriteRule ^$ public/ [QSA,L]
RewriteRule (.*) public/$1 [QSA,L]
application htaccess
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?hedef=$1 [PT,L]
I added cpanelden subdomains but infiniteloop happens when I run the subdomain, how can I fix this?
example subdomain link: http://ucgen.metehanboy.com/example/example
other link: http://metehanboy.com/authentication/index
mainDomain folder include mvc php app
subsDomain folder includes test application scripts
Apache Error Log
[Wed May 02 14:16:26.044185 2018] [core:alert] [pid 3117] [client 95.70.153.106:59513] /home/metehanboy/public_html/.htaccess: Invalid command 'RewriteLog', perhaps misspelled or defined by a module not included in the server configuration
[Wed May 02 14:16:26.043954 2018] [core:alert] [pid 3117] [client 95.70.153.106:59513] /home/metehanboy/public_html/.htaccess: Invalid command 'RewriteLog', perhaps misspelled or defined by a module not included in the server configuration
[Wed May 02 14:15:42.256845 2018] [core:alert] [pid 2690] [client 95.70.153.106:59497] /home/metehanboy/public_html/.htaccess: Invalid command 'RewriteLogLevel', perhaps misspelled or defined by a module not included in the server configuration
[Wed May 02 14:15:42.256734 2018] [core:alert] [pid 2690] [client 95.70.153.106:59497] /home/metehanboy/public_html/.htaccess: Invalid command 'RewriteLogLevel', perhaps misspelled or defined by a module not included in the server configuration
[Wed May 02 14:15:34.964648 2018] [core:alert] [pid 2641] [client 95.70.153.106:59496] /home/metehanboy/public_html/.htaccess: Invalid command 'RewriteLogLevel', perhaps misspelled or defined by a module not included in the server configuration
[Wed May 02 14:15:34.964434 2018] [core:alert] [pid 2641] [client 95.70.153.106:59496] /home/metehanboy/public_html/.htaccess: Invalid command 'RewriteLogLevel', perhaps misspelled or defined by a module not included in the server configuration
[Wed May 02 14:15:21.351847 2018] [core:alert] [pid 2696] [client 95.70.153.106:59491] /home/metehanboy/public_html/.htaccess: Invalid command 'RewriteLogLevel', perhaps misspelled or defined by a module not included in the server configuration
[Wed May 02 14:15:21.351768 2018] [core:alert] [pid 2696] [client 95.70.153.106:59491] /home/metehanboy/public_html/.htaccess: Invalid command 'RewriteLogLevel', perhaps misspelled or defined by a module not included in the server configuration
[Wed May 02 14:13:47.582923 2018] [core:error] [pid 3117] [client 95.70.153.106:59459] AH00124: Request exceeded the limit of 10 internal redirects due to probable configuration error. Use 'LimitInternalRecursion' to increase the limit if necessary. Use 'LogLevel debug' to get a backtrace., referer: http://ucgen.metehanboy.com/
[Wed May 02 14:13:47.582877 2018] [core:error] [pid 3117] [client 95.70.153.106:59459] AH00124: Request exceeded the limit of 10 internal redirects due to probable configuration error. Use 'LimitInternalRecursion' to increase the limit if necessary. Use 'LogLevel debug' to get a backtrace., referer: http://ucgen.metehanboy.com/
[Wed May 02 14:13:46.839964 2018] [core:error] [pid 3118] [client 95.70.153.106:59457] AH00124: Request exceeded the limit of 10 internal redirects due to probable configuration error. Use 'LimitInternalRecursion' to increase the limit if necessary. Use 'LogLevel debug' to get a backtrace., referer: http://ucgen.metehanboy.com/
[Wed May 02 14:13:46.839899 2018] [core:error] [pid 3118] [client 95.70.153.106:59457] AH00124: Request exceeded the limit of 10 internal redirects due to probable configuration error. Use 'LimitInternalRecursion' to increase the limit if necessary. Use 'LogLevel debug' to get a backtrace., referer: http://ucgen.metehanboy.com/
[Wed May 02 14:13:39.737762 2018] [core:error] [pid 2696] [client 95.70.153.106:59446] AH00124: Request exceeded the limit of 10 internal redirects due to probable configuration error. Use 'LimitInternalRecursion' to increase the limit if necessary. Use 'LogLevel debug' to get a backtrace., referer: http://ucgen.metehanboy.com/
[Wed May 02 14:13:39.737686 2018] [core:error] [pid 2696] [client 95.70.153.106:59446] AH00124: Request exceeded the limit of 10 internal redirects due to probable configuration error. Use 'LimitInternalRecursion' to increase the limit if necessary. Use 'LogLevel debug' to get a backtrace., referer: http://ucgen.metehanboy.com/
In cPanel, you can add subdomains adjacent to your main domain, instead of a subdirectory. Why do you need that over-complicated structure? What's the benefit? Use something like this and save yourself the headache:
public_html/
|____.htaccess (application htaccess)
|____index.php
public_html_ucgen/
|____.htaccess (subdomain htaccess)
|____index.php

how many htaccess files there shall be?

How i shall organise htaccess files?
Shall there be a single file, or file in each folder?
I have somedomain/public/.htaccess, which puts url string to $_REQUEST['url'] variable. This is the second part of the code below, and it works.
Later, i created somedomain/.htaccess with code for redirecting to https://www.
Two separate files did not work, thus i pasted the somedomain/public/.htaccess to somedomain/.htaccess. But nothing works. How to achieve these two functionalities. I means redirection to https://www and url fetching to variable. Where is the mistake below?
Shall i create somedomain/.htaccess, somedomain/public/.htaccess, somedomain/somefolder/.htaccess, ....
Or i shall have only one somedomain/.htaccess which deals with all redirections?
If i have only one somedomain/.htaccess as it is below, how i shall redirect
somedomain to somedomain/public/index.php
somedomain/{url not matching somedomain/public/index.php/parameters} to error
folder structure
somedomain.com/
.htaccess
/public
#.htaccess #the second part of code, which i copied to somedomain.com/.htaccess
index.php
.htaccess in somedomain.com/
#first part of htaccess
# Rewrite to HTTPS:
# If www. is already there it will be included, if not
# it will be catched by the subsequent rule.
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
#[L,R=301]
# Now, rewrite any request to the wrong domain to use www.
# [NC] is a case-insensitive match
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule (.*) https://www.%{HTTP_HOST}%{REQUEST_URI}
#[L,R=301]
RewriteEngine On
# the default webpage loaded by the server:
DirectoryIndex /public/index.php/security/login
IndexIgnore *
#Second part of htaccess
#rules to fetch controller name and method name starting from /public/index.php/
RewriteBase /public/
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{ENV:REQUEST_FILENAME} !-d
RewriteCond %{ENV:REQUEST_FILENAME} !-f
RewriteCond %{ENV:REQUEST_FILENAME} !-l
RewriteRule ^index.php?(.+)$ index.php?url=$1 [QSA,L]
I am gettting the error : The server encountered an internal error or misconfiguration and was unable to complete your request. ...
Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request.
Previously i had only the second part of .htaccess in somedomain.com/public .
Server error logs:
[Thu Apr 20 08:37:36 2017] [error] [client 213.133.81.6] File does not exist: /home/gintare/public_html/typejoy.biz/500.shtml
[Thu Apr 20 08:45:43 2017] [alert] [client 213.133.81.6] /home/gintare/public_html/typejoy.biz/.htaccess: Invalid command '\xef\xbb\xbf', perhaps misspelled or defined by a module not included in the server configuration
[Thu Apr 20 08:45:43 2017] [alert] [client 213.133.81.6] /home/gintare/public_html/typejoy.biz/.htaccess: Invalid command '\xef\xbb\xbf', perhaps misspelled or defined by a module not included in the server configuration
[Thu Apr 20 08:46:04 2017] [alert] [client 213.133.81.6] /home/gintare/public_html/typejoy.biz/.htaccess: Invalid command '\xef\xbb\xbf', perhaps misspelled or defined by a module not included in the server configuration
[Thu Apr 20 08:46:04 2017] [alert] [client 213.133.81.6] /home/gintare/public_html/typejoy.biz/.htaccess: Invalid command '\xef\xbb\xbf', perhaps misspelled or defined by a module not included in the server configuration
[Thu Apr 20 08:46:08 2017] [alert] [client 213.133.81.6] /home/gintare/public_html/typejoy.biz/.htaccess: Invalid command '\xef\xbb\xbf', perhaps misspelled or defined by a module not included in the server configuration
[Thu Apr 20 08:46:08 2017] [alert] [client 213.133.81.6] /home/gintare/public_html/typejoy.biz/.htaccess: Invalid command '\xef\xbb\xbf', perhaps misspelled or defined by a module not included in the server configuration
[Thu Apr 20 10:05:04 2017] [warn] RSA server certificate CommonName (CN) `typejoy.biz' does NOT match server name!?
[Thu Apr 20 10:50:27 2017] [error] [client 115.118.128.202] File does not exist: /home/gintare/public_html/typejoy.biz/favicon.ico
[Thu Apr 20 10:50:27 2017] [error] [client 115.118.128.202] File does not exist: /home/gintare/public_html/typejoy.biz/404.shtml
[Thu Apr 20 10:51:41 2017] [error] [client 115.118.128.202] File does not exist: /home/gintare/public_html/typejoy.biz/favicon.ico
[Thu Apr 20 10:51:41 2017] [error] [client 115.118.128.202] File does not exist: /home/gintare/public_html/typejoy.biz/404.shtml

CakePHP and EasyPHP

I'm new in PHP and I'm facing some problems.
I'm using EasyPHP (DevServer 14.1 -> PHP 5.5.8 and Apache 2.4.7) and CakePHP (2.5.1).
Well, if I put the CakePHP files at "C:\Program Files\EasyPHP\data\localweb\" (then it would be "C:\Program Files\EasyPHP\data\localweb\cake_2_0..." for example), it works fine, as it should.
The problem is: I would like to use alias on EasyPHP, for I don't want to develop at "C:\Program Files...". But when I put the CakePHP files on my application root ("C:\myapps\myproject..." for example, with an alias set on EasyPHP), then I get a "Error 404". Now, I found that if I remove the .htaccess file from root, it works. But I'm sure this file is there for some reason, so I don't feel right just removing it - it might give me more problems later.
Does anyone know anything about it? Can I use alias on EasyPHP if I want to use CakePHP?
Thanks in advance.
Edited
This is my apache_alias.conf (C:\Program Files\EasyPHP-DevServer-14.1VC11\data\conf):
Alias "/cakeblogtutorial" "C:/Programacao/PHP/workspace/CakeBlogTutorial"
<Directory "C:/Programacao/PHP/workspace/CakeBlogTutorial">
Options FollowSymLinks Indexes
AllowOverride All
Order deny,allow
Allow from 127.0.0.1
Deny from all
Require all granted
</Directory>
This is my .htaccess (C:\Programacao\PHP\workspace\CakeBlogTutorial):
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^$ app/webroot/ [L]
RewriteRule (.*) app/webroot/$1 [L]
</IfModule>
On my httpd.conf (C:\Program Files\EasyPHP-DevServer-14.1VC11\binaries\conf_files), regarding to mod_rewrite (in other words, uncommented):
LoadModule rewrite_module modules/mod_rewrite.so
Last lines on error.log (C:\Program Files\EasyPHP-DevServer-14.1VC11\binaries\apache\logs):
[Mon Jun 02 14:27:48.093057 2014] [:error] [pid 4284:tid 848] [client 127.0.0.1:62831] script 'C:/Program Files/EasyPHP-DevServer-14.1VC11/data/localweb/index.php' not found or unable to stat
[Mon Jun 02 14:34:59.319532 2014] [mpm_winnt:notice] [pid 1992:tid 312] AH00424: Parent: Received restart signal -- Restarting the server.
[Mon Jun 02 14:34:59.982390 2014] [mpm_winnt:notice] [pid 1992:tid 312] AH00455: Apache/2.4.7 (Win32) PHP/5.5.8 configured -- resuming normal operations
[Mon Jun 02 14:34:59.982390 2014] [mpm_winnt:notice] [pid 1992:tid 312] AH00456: Apache Lounge VC11 Server built: Nov 21 2013 20:13:01
[Mon Jun 02 14:34:59.982390 2014] [core:notice] [pid 1992:tid 312] AH00094: Command line: 'C:\\PROGRA~1\\EASYPH~1.1VC\\binaries\\apache\\bin\\eds-httpd.exe -d C:/Program Files/EasyPHP-DevServer-14.1VC11/binaries/apache'
[Mon Jun 02 14:34:59.988391 2014] [mpm_winnt:notice] [pid 1992:tid 312] AH00418: Parent: Created child process 6588
[Mon Jun 02 14:35:01.279844 2014] [mpm_winnt:notice] [pid 6588:tid 364] AH00354: Child: Starting 64 worker threads.
[Mon Jun 02 14:35:01.523147 2014] [mpm_winnt:notice] [pid 4284:tid 364] AH00364: Child: All worker threads have exited.
Last lines on access.log (C:\Program Files\EasyPHP-DevServer-14.1VC11\binaries\apache\logs):
127.0.0.1 - - [02/Jun/2014:15:09:50 -0300] "GET /cakeblogtutorial HTTP/1.1" 301 242
127.0.0.1 - - [02/Jun/2014:15:09:50 -0300] "GET /cakeblogtutorial/ HTTP/1.1" 404 1156
I guess I found the answer - and if so, the RewriteBase is the correct thing to do. From the CakePHP WebSite (http://book.cakephp.org/2.0/en/installation/url-rewriting.html):
For many hosting services (GoDaddy, 1and1), your web server is actually being served from a user directory that already uses mod_rewrite. If you are installing CakePHP into a user directory (http://example.com/~username/cakephp/), or any other URL structure that already utilizes mod_rewrite, you’ll need to add RewriteBase statements to the .htaccess files CakePHP uses (/.htaccess, /app/.htaccess, /app/webroot/.htaccess).

localhost not reading htaccess, httpd AllowOverride All causes error

I am newbie trying to duplicate my online site on to a local server using Apache 2.2.22 and PHP 5.3.15. However, my localhost isn't reading the .htaccess file. I modified the example httpd.conf file and it registers the site correctly starting with localhost/index.php. But if I goto localhost/index I get a "Not Found" error. The .htaccess file works fine through my ISP (i.e. mysite.com/index works without a problem).
At first I thought it was a problem with my .htaccess rewrite
ErrorDocument 404 /404.php
RewriteEngine on
RewriteRule ^([a-zA-Z0-9]+)(/[a-zA-Z0-9/]+)?$ /$1\.php$2 [L]
But my localhost isn't reading the 404 error either which lead me to think it is the httpd.conf file. After some research a found a similar problem happens when the AllowOverride isn't switched to 'All'. Here is the what I had.
<Directory "D:/mywebfile/webserver/website/public_html">
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
When I switch it to AllOverride All, I get an "Internal Server Error" with the following log error
httpd.exe: Could not reliably determine the server's fully qualified domain name, using 10.0.99.35 for ServerName [Sat Aug 04 15:15:55 2012] [notice] Child 9152: Child process is running
[Sat Aug 04 15:15:55 2012] [notice] Child 9152: Acquired the start mutex.
[Sat Aug 04 15:15:55 2012] [notice] Child 9152: Starting 64 worker threads.
[Sat Aug 04 15:15:55 2012] [notice] Child 4764: Released the start mutex
[Sat Aug 04 15:15:56 2012] [notice] Child 4764: All worker threads have exited.
[Sat Aug 04 15:15:56 2012] [notice] Child 4764: Child process is exiting
[Sat Aug 04 15:15:56 2012] [notice] Child 9152: Starting thread to listen on port 80.
[Sat Aug 04 15:15:58 2012] [alert] [client 127.0.0.1] D:/mywebfile/mywebserver/website/public_html/.htaccess: >Invalid command 'RewriteEngine', perhaps misspelled or defined by a module not included in the server configuration
I have also tried to uncomment
#LoadModule rewrite_module modules/mod_rewrite.so
in the httpd file but I still get the same "Internal Server Error"
This seems like a simple problem but I've exhausted all my simple solutions. Any help will be greatly appreciated (and save me what little hair I haven't pulled out).
Thank you!
The problem is with the RewriteEngine command, not AllowOverride. That just activates the rewrite command.
Activating mod_rewrite is the way to go, the way you show. Make sure you are editing the right httpd.conf file and that you restart the server before trying again.

Using .htaccess to block referrer spam

Our forum gets targeted a lot by automated bots that try to register automatically.
We can see an example here from the error log
[Sun Apr 03 14:04:46 2011] [error]
[client 70.183.110.133] File does not
exist:
/home/spoilert/public_html/forum/++++++++++++++++++++++++++++++++++++Result:+captcha+decoded+(23+attempts);+registered+(registering+only+mode+is+ON);,
referer:
http://forum.spoilertv.co.uk/++++++++++++++++++++++++++++++++++++Result:+captcha+decoded+%2823+attempts%29;+registered+%28registering+only+mode+is+ON%29;
[Sun Apr 03 13:45:54 2011] [error]
[client 70.183.110.133] File does not
exist:
/home/spoilert/public_html/2008,
referer:
I've updated my htaccess with this code
SetEnvIfNoCase Referer
"^http://(W)decoded.*$" banned
Deny
from env=banned
It "should" deny any referrer link with the word decoded in it but it seems that it's not working. I still seem to be getting a few of these robots getting through with the same URL so it seems that it's still happening.
What happens if you change it to
SetEnvIfNoCase Referer ".*+decoded+.*" banned
Deny from env=banned

Resources