2015-12-14 4 views
1

Я создал следующий файл .htaccess и мне интересно, если это может быть улучшено:Как улучшить этот .htaccess файл?

RewriteEngine On 

RewriteRule ^site$ ./site/ [L,NC] 
RewriteRule ^site/(.*)$ ./main/$1 [L,NC] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_URI} !/en [NC] 
RewriteRule ^(.*)$ ./404.php?url=$1 [L,NC] 

Я хочу, чтобы перенаправить посетителей, которые входят в www.domain.com/site/ www.domain.com/main/ и все остальные запросы на www.domain.com/404.php?url = ... Это работает, за исключением случаев, когда пользователь не вводит конечную косую черту (www.domain.com/site).

ответ

0

Вы должны быть в состоянии сделать это с помощью /? как

RewriteEngine On 

RewriteRule ^site$ ./site/? [L,NC] 
RewriteRule ^site/(.*)$ ./main/$1 [L,NC] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_URI} !/en [NC] 
RewriteRule ^(.*)$ ./404.php?url=$1 [L,NC] 
0

для первого правила перезаписи site в site/, а затем переписать site/ в main/. Я предпочел бы сделать это за один шаг, например.

RewriteRule ^site/?$ ./main/ [L,NC] 

Второе правило останется таким, каким оно есть.


С текущими правилами, вы только перенаправить несуществующие пути к 404.php. Если это то, что вы хотите, все в порядке. Если нет, то вы должны удалить !-f и !-d условия и добавить условие, чтобы исключить main из переписывается в 404

RewriteCond %{REQUEST_URI} !/main/ [NC] 

Даже если замена ./404.php действительно, я написал бы его как

RewriteRule ^(.*)$ 404.php?url=$1 [L,NC] 
Смежные вопросы