Какое правило mod_rewrite может удалить расширения index.php и php (из другого существующего правила)? - PullRequest
1 голос
/ 03 августа 2010

Я использую следующий шаблон:

http://example/index.php?lang=en
http://example/index.php?lang=es
http://example/index.php?lang=zh-tw
http://example/index.php?lang=zh-cn

И я использую следующее правило mod_write:

RewriteEngine on
RewriteRule ^([a-z]{2}(-[A-Z]{2})?)/(.*) $3?lang=$1 [L,QSA]

С этим правилом я могу использовать следующие URL-адреса, которые перенаправляют меня на URL-адресавыше (исходные):

http://example/en/index.php
http://example/es/index.php
http://example/zh-cn/index.php
http://example/zh-tw/index.php

Хотелось бы просто набрать:

http://example/en
http://example/es
http://example/zh-cn
http://example/zh-tw

Для доступа к индексным страницам ...

и ввести это:

http://example/en/thanks
http://example/es/thanks
http://example/zh-cn/thanks
http://example/zh-tw/thanks

, чтобы ввести thanks.php файл, который у меня есть.

Любые предложения, чтобы получить такой результат?

(Я думаю, что это должно быть довольно распространенным явлением. Почти каждый профессионална сайте есть страницы в этом стиле: пример / раздел).

1 Ответ

1 голос
/ 03 августа 2010

Если я правильно понял, что вы искали, следующее должно делать то, что вы хотите (мои правила предполагают, что вы используете корень домена):

RewriteEngine on

# Go to index.php by default if nothing is specified after the language
RewriteCond %{REQUEST_URI} ^/[a-z]{2}(-[A-Za-z]{2})?/?$
RewriteRule ([^/]*)/?$ index.php?lang=$1

# Rewrite domain.com/lang/index to domain.com/lang
RewriteRule ^([a-z]{2}(-[A-Z]{2})?)/index(\.php)?$ $1 [R,QSA]

# Allow pages to be specified without the .php extension
# The RewriteCond tells mod_rewrite to not rewrite if the request is a real file
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([a-z]{2}(-[A-Z]{2})?)/(.*)(\.php)? $3.php?lang=$1 [L,QSA]

Если выне в корне домена (т. е. ваши URL-адреса domain.com/subdomain/en/index), вам нужно указать RewriteBase /subdomain и немного изменить RewriteCond (вы поместите правила в файл .htaccessв подкаталоге):

RewriteCond %{REQUEST_URI} ^/subdomain/[a-z]{2}(-[A-Za-z]{2})?/?$

Если у вас все еще возникают проблемы с загрузкой CSS, попробуйте использовать абсолютные пути.Относительный путь будет применяться после перенаправления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...