То, что я пытаюсь достичь:mod_rewrite и довольно URLs
1) http://localhost/en/script.php?param1=random будет привязан к http://localhost/script.php?param1=random&language=English
- Это должно работать всегда.
2) http://localhost/en/random/text/here будет отображаться в http://localhost/categories.php?term=random/text/here
- Это должно работать, если случайный/текст/здесь 404
То, что я на данный момент:
RewriteEngine on
RewriteCond substr(%{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^en/(.+)$ categories.php?lang=English&terms=$1 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ee/(.+)$ categories.php?lang=Estonian&terms=$1 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^fi/(.+)$ categories.php?lang=Finnish&terms=$1 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ru/(.+)$ categories.php?lang=Russian&terms=$1 [L]
RewriteRule ^en/(.*) $1?lang=English [QSA]
RewriteRule ^ee/(.*) $1?lang=Estonian [QSA]
RewriteRule ^ru/(.*) $1?lang=Russian [QSA]
RewriteRule ^fi/(.*) $1?lang=Finnish [QSA]
В чем проблема:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
Предполагается перенаправить на category.php? Lang = английский IF/en/this/here/does/not/match/a/script. Если я загружу URL-адрес, такой как en/index.php, он также будет отображаться в категории.php? Lang = English, потому что en/index.php не существует.
То, что я подумал:
зиЬзЬг (% {REQUEST_FILENAME}, 3) будет решить мою проблему (как в настоящее время /ee/index.php буквально отображается в /ee/index.php вместо того, чтобы просто/index.php)
к сожалению, я не мог найти способ манипулировать строки:/
Это работало нормально, но почему-то, если URL-адрес: http: // localhost/en/sales/subcategory, это аргументы, которые передаются в catagories.php: array (2) {["terms"] => string (35) «sales/subcategory/sales/subcategory» ["lang"] => string (7) "English"} Любые мысли? – Peeter
Добавление L к языковым правилам, похоже, исправило это. – Peeter
@Peeter: флаг [L] пропустит правило «категории». Для URL-адресов, которые не сопоставляются с файлами, компонент конечного пути хранится как информация о пути. Apache может удвоить компонент, пытаясь сохранить информацию о пути. Попробуйте добавить флаг информации о пути отбрасывания («DPI») к языковым правилам (см. Обновленный код). – outis