【发布时间】:2018-01-19 14:20:25
【问题描述】:
所以我一直在搞乱我的网站(昨天还在工作),我错误地用空白文件重写了我的 .htaccess 文件(想将一个文件夹中的文件复制到不同的文件夹中,但搞砸了)它重写了根文件夹的.htaccess),所以我正在尝试再次制作(是的,我知道,应该有备份)。
现在问题来了:我在 .htaccess 文件中编辑不相关的东西,突然图像停止显示,被重定向到我的 404 错误页面。在我看来,Apache 突然开始忽略我的某些 RewriteCond 规则,因为 css 和 javascript 规则通常有效,这让我发疯了。
我尝试到处搜索,但没有找到解决方案。 这是我当前的 .htaccess 文件:
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_URI} !=/index_new.php
RewriteCond %{REQUEST_URI} !.*\.png$ [NC]
RewriteCond %{REQUEST_URI} !.*\.jpg$ [NC]
RewriteCond %{REQUEST_URI} !.*\.css$ [NC]
RewriteCond %{REQUEST_URI} !.*\.gif$ [NC]
RewriteCond %{REQUEST_URI} !.*\.js$ [NC]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)$ index_new.php?sekce=$1 [NC,L]
RewriteRule ^([^/]+)/$ index_new.php?sekce=$1 [NC,L]
RewriteRule ^([^/]+)/([^/]+)$ index_new.php?sekce=$1&podsekce=$2 [NC,L]
RewriteRule ^([^/]+)/([^/]+)/([^/]+)$ index_new.php?sekce=$1&podsekce=$2&podpodsekce=$3 [NC,L]
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/([^/]+)$ index_new.php?sekce=$1&podsekce=$2&podpodsekce=$3&podpodpodsekce=$4 [NC,L]
问题被标记为重复,但我已经尝试了解决方案(在写问题之前)并且它们不起作用,因为我也使用图像的绝对路径,但无论如何我都无法找到它们。
【问题讨论】:
-
RewriteConds 只影响直接关注的RewriteRule,而不是全部... -
但是现在不要在每条规则之前重复所有这些条件,而应该在它们之后放置一个完全不重写的规则,并且只使用 L 标志表示不再处理本次迭代中的规则。 (在我的脑海中,像
RewriteRule .* - [L]这样的东西应该可以。) -
我需要 htaccess 来重写我的 url,所以如果我执行 page.com/articles,它会在内部传递 page.com/index_new.php?sekce=articles。我知道 RewriteCond 只影响第一条规则,但只有一条规则应该匹配,具体取决于传递的参数数量。我的问题也是,是否可以解释为什么根文件夹中的图像有效,而根/图像文件夹中的图像无效。编辑:如果我使用你的规则,页面会抛出 403 Forbidden
-
根文件夹中的图像确实有效,因为只有您的第一条规则会匹配不包含任何 / 的任何内容,并且该规则具有阻止它处理图像之前的条件。一旦您进入子文件夹,第二条规则就会成为适用的规则 - 但它对图像没有任何限制,因此它将请求重写为 index_new.php ...
-
我在我的第一个 RewriteRule 中使用了 L 标志,根据我找到的信息,这应该会在成功匹配规则后停止执行。我仍然看不到问题的解决方案。不久前它显示图像还不错,突然就不行了。 CSS 和 JS 文件也适用于所有“案例”(无论我使用多少参数)。
标签: php apache .htaccess redirect mod-rewrite