Jak na <presenter>.domena.cz/<action>/…?
- Zuben45
- Člen | 268
Zdravím,
potřeboval bych poradit, jak mám správně nastavit Nette, popřípadě
.htaccess nebo apache.config, aby mi fungovalo routování ve tvaru
<presenter>.domena.cz/<action>/
Ať upravuji, jak chci, stále mi vyskočí buď stránka nenalezena nebo přístup zamítnut.
Můj routerFactory:
<?php
use Nette\Application\Routers\RouteList,
Nette\Application\Routers\Route,
Nette\Application\Routers\SimpleRouter;
use Nette\Utils\Strings;
/**
* Router factory.
*/
class RouterFactory
{
/**
* @return Nette\Application\IRouter
*/
public function createRouter()
{
Route::addStyle('nicename');
Route::setStyleProperty('nicename', Route::FILTER_OUT, function($url) {
return Strings::webalize($url);
});
Route::setStyleProperty('nicename', Route::FILTER_IN, function($url) {
return Strings::webalize($url);
});
Route::addStyle('zanr');
Route::setStyleProperty('zanr', Route::FILTER_OUT, function($url) {
return Strings::webalize($url);
});
Route::setStyleProperty('zanr', Route::FILTER_IN, function($url) {
return Strings::webalize($url);
});
Route::addStyle('tag');
Route::setStyleProperty('tag', Route::FILTER_OUT, function($url) {
return Strings::webalize($url);
});
Route::setStyleProperty('tag', Route::FILTER_IN, function($url) {
return Strings::webalize($url);
});
$router = new RouteList();
....
$router[] = new Route('//[www.]domena.cz/<presenter>/<action>/', array(
'presenter' => 'Homepage',
'action' => 'default',
));
$router[] = new Route('//[recenze.]domena.cz/<action>/', array(
'presenter' => 'Recenze',
'action' => 'default',
));
$router[] = new Route('//[<presenter>.]domena.cz/<action>/', array(
'presenter' => 'Homepage',
'action' => 'default',
));
return $router;
}
}
Moje struktura webu
- domena.cz
- – www (zde Nette)
- – subdomains
- – .htaccess
- – apache.config
.htaccess ze složky domena.cz
RewriteEngine On
RewriteBase /
# cele domeny (aliasy)
RewriteCond %{REQUEST_URI} !^www/
RewriteCond %{REQUEST_URI} !^/www/
RewriteCond %{HTTP_HOST} ^(www.)?(.*)$
RewriteCond %{DOCUMENT_ROOT}/www/%2 -d
RewriteRule (.*) www/%2/$1 [DPI]
# subdomeny (s nebo bez www na zacatku)
RewriteCond %{REQUEST_URI} !^subdomains/
RewriteCond %{REQUEST_URI} !^/subdomains/
RewriteCond %{HTTP_HOST} ^(www.)?(.*)\.([^.]*)\.([^.]*)$
RewriteCond %{DOCUMENT_ROOT}/subdomains/%2 -d
RewriteRule (.*) subdomains/%2/$1 [DPI]
# aliasy - spravne presmerovani pri chybejicim /
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^www/[^/]+/(.+[^/])$ /$1/ [R]
# subdomeny - spravne presmerovani pri chybejicim /
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^subdomains/[^/]+/(.+[^/])$ /$1/ [R]
# Nette Framework
RewriteCond %{HTTP_HOST} ^(www.)?(.*).([^.]*).([^.]*)$
RewriteCond %{DOCUMENT_ROOT}/www/%2.%3.%4 !-d
RewriteCond %{DOCUMENT_ROOT}/subdomains/%2 !-d
RewriteCond %{HTTP_HOST} ^(www.)?([^.]*).([^.]*){2,4}$
RewriteCond %{REQUEST_URI} !^www/
RewriteCond %{REQUEST_URI} !^/www/
RewriteCond %{DOCUMENT_ROOT}/www -d
RewriteRule (.*) www/$1 [DPI]
# Nette Framework
#RewriteEngine On
#RewriteRule ^index.php$ - [L]
# uploaded files
#RewriteRule ^files/(.+) wp-includes/ms-files.php?file=$1 [L]
#RewriteCond %{REQUEST_FILENAME} -f [OR]
#RewriteCond %{REQUEST_FILENAME} -d
#RewriteRule ^ - [L]
#RewriteRule . index.php [L]
apache.cofig
<VirtualHost *:80>
ServerName domena.cz
ServerAlias www.domena.cz
DocumentRoot /domains/domena.cz/www
ErrorLog /domains/domena.cz/logs/error.log
LogLevel warn
</VirtualHost>
<VirtualHost *:80>
ServerAlias *.domena.cz domena.cz
VirtualDocumentRoot /domains/domena.cz/subdomains/%1
ErrorLog /domains/domena.cz/logs/error.log
LogLevel warn
</VirtualHost>
<VirtualHost *:80>
VirtualDocumentRoot /domains/domena.cz/www/%1.domena.cz/
</VirtualHost>
.htaccess ze složky domena.cz/www
RewriteEngine On
# Apache configuration file (see httpd.apache.org/docs/current/mod/quickreference.html)
# disable directory listing
<IfModule mod_autoindex.c>
Options -Indexes
</IfModule>
# enable cool URL
RewriteEngine On
# RewriteBase /
# prevents files starting with dot to be viewed by browser
RewriteRule /\.|^\. - [F]
# front controller
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule !\.(pdf|js|ico|gif|jpg|png|css|rar|exe|zip|tar\.gz)$ index.php [L]
# enable gzip compression
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/x-javascript text/javascript application/javascript application/json
</IfModule>
mám vlastní VPS server, zkouším to už dlouho a stále se mi to nedaří vyřešit, přitom na jiném webu mi bez problému fungoval router pro jazyky (<lang=cs>.domena.cz/…).
Za pomoc bych byl velice rád. Děkuji
Editoval Zuben45 (15. 1. 2015 2:49)
- Zuben45
- Člen | 268
Jan Endel napsal(a):
Změn pořadí rout, vyhodnocuji se od vrchy nahoru, první dej:
$router[] = new Route('//[<presenter>.]domena.cz/<action>/', array( 'presenter' => 'Homepage', 'action' => 'default', ));
Aha děkuji, tak jsem to nastavil jako první, ovšem pořád stránka Not Found. Nebude problém spíše v .htaccess nebo apache.config ?