[英].htaccess mod_rewrite does not work with two parameters on localhost
我想在我的项目中使用干净的URL。 因此,我已将这些代码编写在.htaccess文件中。
RewriteEngine On
Options +FollowSymLinks
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/\.]+)/([^/\.]+)/?$ index.php?page=$1&id=$2 [NC,QSA,L]
RewriteRule ^([^/\.]+)/?$ index.php?page=$1 [NC,QSA,L]
但是当我尝试在本地使用它时,它不能完全起作用。
想象一下,我在本地Web服务器路径中的htdocs(www)中有一个目录myproject
,其他文件存储在此文件夹中。 现在,如果转到localhost/project
我可以看到该localhost/project
。
现在,我想使用URL。
如果我在URI中只有一个参数(例如localhost/myproject/tours
它会很好地工作。 但是,如果我有2个参数,例如localhost/myprojects/tours/inside
,似乎所有的css,js和images文件都会消失。 我还向.htaccess文件添加了RewriteBase /myproject
,但没有解决。
我怎么了 我需要在远程和本地服务器上都可以使用的解决方案。
首先,请参阅我对其他有关代码的问题的答复: 为什么.htaccess mod_rewrite不显示真实目录
现在, RewriteBase
不会解决您有关css / js / images等的问题。它仅用于htaccess,并且在重写规则时定义了基本路径。
避免此问题的一种常用方法是在所有文件的<head>
html标记后添加基本URL。
对于您来说,它将是: <base href="http://localhost/myproject/" />
否则,如果您到达localhost/myprojects/tours/inside
则您的css / js / images 链接将解析为localhost/myprojects/tours/inside/__here__
因为此处的默认基本路径是当前目录( /myproject/tours/inside/
),这不是您想要的
编辑:如果是这种情况,请不要忘记从css / images / javascript html链接中删除前导斜杠
浏览器将通过查看/ myprojects / tours的组合上下文,从相对URL路径中构建绝对URL路径。 您可能需要剥离该前缀的一两个级别才能找到真实路径。
访问日志将简单地向您显示当您使用旧的和新的URL时,相对URL的输入。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.