Переадресация .htaccess и проблема с переменными - PullRequest
1 голос
/ 23 января 2011

Я работал некоторое время, чтобы попытаться получить

website.com/$1/$2/$3
website.com/$1/$2

для производства

website.com/public/index.php?module=$1&controller=$2&action=$3
website.com/public/index.php?controller=$1&action=$2

но я не могу заставить его работать

Я пытаюсь сделать это с двумя файлами .htaccess

.htaccess файл находится в корне /

<IfModule mod_rewrite.c>
Options +FollowSymLinks
Options +Indexes

   RewriteEngine on
RewriteRule !^public/ public%{REQUEST_URI} [L]

 </IfModule>

.htaccess файл находится в корне / public /

<IfModule mod_rewrite.c>
Options +FollowSymLinks
Options +Indexes

   RewriteEngine on
RewriteRule ^public/([^/]+)/([^/]+)/([^/]+)(/|)$ public/index.php?module=$1&controller=$2&action=$3
RewriteRule ^public/([^/]+)/([^/]+)(/|)$ public/index.php?controller=$1&action=$2

 </IfModule>

У меня сейчас есть перенаправление на общедоступный /, но я не могу найти способ изменить переменные get

Ответы [ 3 ]

1 голос
/ 24 января 2011

Я решил это сам с этим единственным .htaccess нормально в корне

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^(.*)\.html$ $1.php [L]
RewriteRule !^public/ public%{REQUEST_URI} [L]
RewriteRule ^(.*)/([style|css|js|javascript|images|img|fonts|swf]+)/(.*)$ public/$2/$3 [L]

RewriteRule ^public/([^/]+)/([^/]+)/([^/]+)/?$ public/index.php?module=$1&controller=$2&action=$3 [L]
RewriteRule ^public/([^/]+)/([^/]+)/?$ public/index.php?controller=$1&action=$2 [L]

EDIT:

Я решил перенести мой URL-адрес на свой php, так как htaccess - это кошмар для такого рода вещей, и если операторы / Else удивительны ... новый код для тех из вас, у кого похожая проблема:

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^(.*)$ public/index.php/$1 [L]
RewriteRule ^(.*)/([style|css|js|javascript|images|img|fonts|swf]+)/(.*)$ public/$2/$3 [L]

ErrorDocument 404 /error404
ErrorDocument 403 /error403 
0 голосов
/ 23 января 2011

Тег <IfModule mod_rewrite.c> работает только в apache-конфигурации.

В вашем файле .htaccess вы должны начать с

RewriteEngine On
RewriteBase /

, а затем указать ваши условия.

0 голосов
/ 23 января 2011

В root / public / .htaccess сопоставленные и переписанные пути относятся к root / public, поэтому они не начинаются с public, и вы не должны пытаться сопоставить ^ public:

RewriteEngine on
RewriteRule ^([^/]+)/([^/]+)/([^/]+)(/|)$ index.php?module=$1&controller=$2&action=$3
RewriteRule ^([^/]+)/([^/]+)(/|)$ index.php?controller=$1&action=$2

Дополнительная косая черта в конце может быть сопоставлена ​​с /?:

RewriteRule ^([^/]+)/([^/]+)/([^/]+)/?$ index.php?module=$1&controller=$2&action=$3
...