Ну, у меня есть этот код в моем файле .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]