Zend Framework htaccess Backend / Frontend - zend-framework

In my current ZF project, I've two public access points (files) ready to handle & process coming requests, that's: index.php & admin.php
I need all URLs containing '/admin' to be routed to admin.php while any other URLs doesn't contain '/admin' to be routed to index.php
Knowing that default ZF htaccess contains the following rules:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]
How this can be implemented?

I want to start by saying that I full heartedly agree with AurelioDeRosa. I do believe that routes will be a better choice. However that is your choice not mine and this .htaccess code should do the trick you want.
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*(admin).*$ admin.php [NC,L]
RewriteRule ^.*$ index.php [NC,L]
Note however that this script will catch anything that contains admin so it might break your frontend. for example, if you want to list all your users with administrative rights the url yoursite.com/users/listby/admin/ will redirect the request to admin.php, and so will urls like /administrator/ or /adminininini

Related

.htaccess - rewrite user login in url

I need to rewrite URL with user login and i use Zend Framework.
.htaccess of ZF project are follow:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]
How to add rule, with rewrite
http://yourdomain.com/user/TOMMY
to
http://yourdomain.com/user/?login=TOMMY
? Where "TOMMY" is user login.
Important: after rewriting, URL in browser leaves without changes.
I can add next rule:
RewriteRule ^user/([a-zA-Z0-9]+)$ /user/?login=$1 [L,R]
But its not correctly, because server redirect browser to other page.
Tnx.
You need to change the other rule so that it doesn't rewrite URI's that start with "/user/"
RewriteCond %{REQUEST_URI} !^/user/
RewriteRule ^.*$ index.php [NC,L]
Now you can rewrite the /user requests using your rule:
RewriteRule ^user/([a-zA-Z0-9]+)$ /user/?login=$1 [L]
Except you don't want that R in the brackets, because it will redirect the browser and change what's in the address bar.

htaccess issue after connecting domain to subfolder

I have a problem with .htaccess. I have a website in the main server folder and a domain that leads to it (adriatic.pl). No i have made a new version of the website and put it in "adriatic_new" folder. When i run adriatic.pl/adriatic_new/public everythig works fine, but when i connect the domain (adriatic.pl) directly to the "adriatic_new" folder I get "500 Internal Server Error".
I found that it may be .htaccess problem bo how to edit it to make it work?
It looks like this:
SetEnv APPLICATION_ENV development
Allow from all
DirectoryIndex main.php
RewriteEngine On
RewriteCond %{DOCUMENT_ROOT}/static/index.html -f
RewriteRule ^/*$ static/index.html [L]
RewriteCond %{DOCUMENT_ROOT}/static/%{REQUEST_URI}.html -f
RewriteRule .* static/%{REQUEST_URI}.html [L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^(.*)/+$
RewriteRule ^.*$ %1 [R=301,L]
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ main.php [NC,L]
php_flag magic_quotes_qpc off
php_flag register_globals off
Ok guys (and ladies?) - problem is solved.
All I had to do was to add "RewriteBase /" in my .htaccess. So simple yet so confusing and annoying. Thanks.

Rewriting css file to controller's action

I would like to use .htaccess to rewrite http://localhost/css/file.css to http://localhost/css/generate
is it possible to do it?
it seems to not working. All I have is this .htaccess and Zend Controller css with action generate
if I go directly to localhost/css/generate I have css output but when I type localhost/css/file.css I get Not Found
this is my .htaccess
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^/css/file\.css$ /css/generate
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]
Change your htaccess to this:
RewriteEngine On
RewriteRule ^/css/file\.css$ /css/generate [L]
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]
the [L] means "last", which stops it running any subsequent rules if a match was found.
Yes. Place this in your top level .htaccess or httpd.conf and restart Apache.
RewriteEngine On
RewriteRule ^/css/file\.css$ /css/generate

Pointing Multiple Domains to Different Folders

I tried to my limit. Mod_rewrite had been such a nightmare. My last try is the code bellow and even with www.water.com working I could not make www.wind.com do the same.
In the mod_rewrite log what I get is www.wind.com (HTTP_HOST) being compared to www.water.com all the time. the rewrite never reaches the second group of lines. Someone perhaps know how to achieve that please?
RewriteEngine On
----------------------------------------------------------
RewriteCond %{HTTP_HOST} (www\.)?water\.com [NC]
RewriteCond %{REQUEST_URI} !^/zend/application/Water/ [NC]
# Excludes the redirection for files that physically exist ( -s); symbolic links ( -); and existing directories (-d).
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ /water.php [NC,L]
----------------------------------------------------------
RewriteCond %{HTTP_HOST} (www\.)?wind\.com [NC]
RewriteCond %{REQUEST_URI} !^/zend/application/Wind/ [NC]
# Excludes the redirection for files that physically exist ( -s); symbolic links ( -); and existing directories (-d).
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ /wind.php [NC,L]
----------------------------------------------------------
For the water group, you have two RewriteRules after your sequence of RewriteConds. The first RewriteRule is applied conditionally based upon the result of the RewriteConds.
But won't the second RewriteRule be applied to all remaining requests, even requests to the domain wind.com? Consider a request for:
http://wind.com/mycontroller/myaction
It will fail all the RewriteConds for water, but then get picked up by:
RewriteRule ^.*$ /water.php [NC,L]
Won't it?
In any case, it seems like this is better handled at the hosting level. Sounds like you want comepletely distinct ZF apps for each domain, each residing in its own folder, no cross-app sharing (except possibly external libs). In that case, just map the domains - at the hosting level - to their different folders.
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteCond %{HTTP_HOST} (www\.)?water\.com [NC]
RewriteCond %{REQUEST_URI} !^/zend/application/Water/ [NC]
RewriteRule ^.*$ /water.php [NC,L]
RewriteCond %{HTTP_HOST} (www\.)?wind\.com [NC]
RewriteCond %{REQUEST_URI} !^/zend/application/Wind/ [NC]
RewriteRule ^.*$ /wind.php [NC,L]
This should work IMO.

ISAPI ZEND url rewrite adding extra "/index.php/" into url

We recently reinstalled our web site on our server, the sys admin says it is an exact rebuild, and it indeed looks to me that it is, but there is something different going on. I did not originally develop the site, and those who did are no longer available.
urls for the admin site are now
//admin.site.com/index.php/schedules
and used to be, and should be
//admin.site.com/schedules
The extra index.php is getting inserted in the url. But all links within the admin site do not include the index.php so they do not work. If you insert the index.php into any url, it works. Where did this index.php come from and how do I eliminate it from the rewrite rules so the links will work.
This is what my httpd.conf file reads:
# Helicon ISAPI_Rewrite configuration file
# Version 3.1.0.56
# turn on rewriting RewriteEngine On RewriteBase /
# for all files not found in the file system,
# reroute to "index.php" bootstrap script,
# keeping the query string intact.
RewriteCond %{HTTP_HOST} ^admin.site.com$
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteCond %{HTTP_HOST} ^admin.site.com$
RewriteRule ^.*$ index.php [NC,L]
Thank you! Any help would be greatly appreciated.
You need to implement and enable ApacheModrewrite. And then put a .htaccess file in your admin.site.com folder
Its content will be :
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]