繁体   English   中英

.htaccess mod_rewrite不适用于本地主机上的两个参数

[英].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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM