好吧,我将这段代码放入了我的 .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
有什么帮助吗?
答案1
我认为规则应该是:
RewriteRule !/php/index\.php\?categorie=apps&subcategorie=error404 /php/index.php?categorie=apps&subcategorie=error404 [L,NS]
模式[^...]
表示除 之后列出的字符之外的任意单个字符^
。!
表示否定整个模式。
答案2
该RewriteRule
指令仅与 URL 路径匹配,特别排除了查询字符串。在.htaccess
(目录) 上下文中此 URL 路径也不以斜杠开头,因为目录前缀首先被删除。
检查“完整 URL”是否不是在 mod_rewrite 中,URL 路径 + 查询字符串的精确匹配并不那么简单。您需要使用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]