Jak na <presenter>.domena.cz/<action>/…?

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Zuben45
Člen | 268
+
0
-

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)

Jan Endel
Člen | 1016
+
+1
-

Změn pořadí rout, vyhodnocuji se od vrchy nahoru, první dej:

$router[] = new Route('//[<presenter>.]domena.cz/<action>/', array(
         'presenter' => 'Homepage',
         'action' => 'default',
     ));
Zuben45
Člen | 268
+
0
-

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 ?