URL rewrite 不重写页面

URL rewrite doesn't rewrite page

我尝试使用 URL 重写模块,但由于某些原因它不会重写 URL。如果我去这个网站:http://localhost/projectredrum/foto.php 它会显示正确的页面,但它不会将 URL 重写为我想要的。

<IfModule mod_rewrite.c>
Options +FollowSymlinks
RewriteEngine on
RewriteBase /projectredrum/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^foto\.php$ /Aquaria-Foto/Fotos
</IfModule>
  1. Rewrite Module Tutorial

看完上面提到的教程后,我想我应该试试没有

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

因为如果你使用它,它只会在 URL 与文件名或目录不匹配时重写 URL。

然而,当我这样做时,我遇到了 404 page not found 问题。

有谁知道为什么 URL 重写不起作用?

由于这种情况无法正常工作:

RewriteCond %{REQUEST_FILENAME} !-f

因为 http://localhost/projectredrum/foto.php 是一个有效文件。

要修复规则,您可以在 /projectredrum/.htaccess:

中使用它
Options +FollowSymlinks
RewriteEngine on
RewriteBase /projectredrum/

RewriteCond %{THE_REQUEST} /foto\.php[?\s] [NC]
RewriteRule ^ /Aquaria-Foto/Fotos [L,NC,R=302]

R=302 用于在浏览器中实际重定向 URL。

DocumentRoot/.htaccess中你可以使用:

RewriteEngine On

RewriteRule ^Aquaria-Foto/Fotos/?$ /projectredrum/foto.php [L,NC]

参考文献:

Apache 进行本地重写,因为页面在同一个服务器中,它可以在同一个请求上加载它。将 [R,L] 添加到 RewriteRule 行的末尾以将浏览器重定向到所需地址。

R表示临时重定向,
L 表示最后一条规则。
R=301 是永久重定向
例如 [R=301,L] 进行永久重定向并停止检查其他规则。

在你的情况下,你可能想使用这种行:

RewriteRule ^foto\.php$ /Aquaria-Foto/Fotos [R,L]

这里是关于标志的更多信息:http://httpd.apache.org/docs/2.4/rewrite/flags.html