Назад | Перейти на главную страницу

правило перезаписи htaccess

Ну, у меня есть этот код в моем файле .htaccess

  Options +FollowSymlinks
    RewriteEngine on

    AddDefaultCharset UTF-8
    RewriteCond %{THE_REQUEST} ^[A-Z]+\ (.+)\.php  [NC]
    RewriteCond %{THE_REQUEST} !/?admincp/?((.)|(\.)*)
    RewriteRule [^/php/error\.php] /php/error.php  [L,NS]

    # Otherwise check if root request and rewrite to /php/index.php
    RewriteRule ^(/?)$ /php/index.php  [L,NS]
    RewriteCond %{THE_REQUEST} !\.php$  [NC]
    RewriteCond %{REQUEST_URI} !/?admincp/?((.)|(\.)*)
    RewriteRule ^([a-z|_]+)/?$ /php/index.php?categorie=$1 [L,NC,NS]
    RewriteCond %{THE_REQUEST} !\.php$  [NC]
    RewriteCond %{REQUEST_URI} !/?admincp/?(.*)
    RewriteRule ^([a-z|_]+)/([a-z|_|0|1|2|3|4|5|6|7|8|9]+)/?$ /php/index.php?categorie=$1&subcategorie=$2 [L,NC,NS]
    RewriteCond %{REQUEST_URI} !/?admincp/?(.*)
    RewriteCond %{THE_REQUEST} !\.php$  [NC]
    RewriteRule ^([a-z|_]+)/([a-z|_|0|1|2|3|4|5|6|7|8|9]+)/([^/]+)\.html$ /php/index.php?categorie=$1&subcategorie=$2&article=$3 [L,NC,NS]
    ErrorDocument 404 /php/index.php?categorie=apps&subcategorie=error404

Я пытаюсь изменить строку 6 на это:

  RewriteRule [^/php/index\.php\?categorie=apps&subcategorie=error404] /php/index.php?categorie=apps&subcategorie=error404  [L,NS]

но это не работает .. Когда я печатаю http://localhost/php/index.php я вижу эту страницу, но я не хочу видеть эту страницу .. я хочу видеть http://localhost/php/index.php?categorie=apps&subcategorie=error404

Любая помощь?

Я думаю, что правило должно быть таким:

RewriteRule !/php/index\.php\?categorie=apps&subcategorie=error404  /php/index.php?categorie=apps&subcategorie=error404  [L,NS]

Шаблон [^...] означает любой одиночный символ, кроме перечисленных после ^. В ! означает отрицание всего паттерна.

В RewriteRule Директива сопоставляется только с URL-путем, что, в частности, исключает строку запроса. В .htaccess (каталог) context этот URL-путь также не начинается с косой черты, так как сначала удаляется префикс каталога.

Проверка того, что "полный URL" не точное совпадение URL-пути + строки запроса в mod_rewrite не так тривиально. Вам нужно будет делать все с RewriteCond директивы и либо используйте два OR'd условия, например:

RewriteCond %{REQUEST_URI} !^/php/index\.php$ [OR]
RewriteCond %{QUERY_STRING} !^categorie=apps&subcategorie=error404$
RewriteRule ^ /php/index.php?categorie=apps&subcategorie=error404  [L,NS]

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

В качестве альтернативы вы можете использовать один состояние и проверить против THE_REQUEST серверная переменная. Это также защитит от любых потенциальных циклов перезаписи, поскольку THE_REQUEST не обновляется при перезаписи URL. Например:

RewriteCond %{THE_REQUEST} !^[A-Z]{3,9}\ /php/index\.php\?categorie=apps&subcategorie=error404\ HTTP/
RewriteRule ^ /php/index.php?categorie=apps&subcategorie=error404  [L,NS]