我尝试使用URL重写模块,但由于某些原因,它不会重写URL。如果我去这个网站:http://localhost/projectredrum/foto.php
,它将显示正确的网页,但它不会重写我想要的网址。
<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>
在看了上面提到的教程之后,我想我应该尝试一下
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
因为如果使用它,只有当URL与文件名或目录不匹配时,它才会重写URL。
然而,当我这样做时,我遇到了一个404 page not found
问题。
有人知道为什么URL重写不起作用吗?
发布于 2015-01-21 13:05:08
由于这种情况,它不起作用:
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]
参考文献:
发布于 2015-01-21 13:10:30
Apache进行本地重写,因为页面位于同一台服务器上,它可以在相同的请求上加载它。将[R,L]
添加到RewriteRule行的末尾,将浏览器重新配置到想要的地址。
R指的是暂时的重定向,
我是说最后一条规则。
R=301是永久的重定向
例如,[R=301,L]
会永久重定向,并停止检查其他规则。
在您的例子中,您可能希望使用这样的行:
RewriteRule ^foto\.php$ /Aquaria-Foto/Fotos [R,L]
下面是有关标志的更多信息:http://httpd.apache.org/docs/2.4/rewrite/flags.html
https://stackoverflow.com/questions/28067768
复制相似问题