【问题标题】:.htaccess mod_rewrite does not work with two parameters on localhost.htaccess mod_rewrite 不适用于 localhost 上的两个参数
【发布时间】:2014-03-05 08:48:32
【问题描述】:

我想在我的项目中使用干净的 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,我可以看到该项目。

现在我想使用 URL。
如果我在 URI 中只有一个参数,例如 localhost/myproject/tours,它会很好地工作。但如果我有 2 个参数,如 localhost/myprojects/tours/inside,似乎所有的 css、js 和图像文件都消失了。我还在 .htaccess 文件中添加了RewriteBase /myproject,但没有解决。

我的错误是什么?我需要一个适用于远程和本地服务器的解决方案。

【问题讨论】:

  • 为什么不使用通配符创建虚拟主机,它会自动使 myproject 根目录中的任何文件夹成为具有唯一域(如 test.myproject、projectb.myproject 等)而不是 localhost 的唯一项目?您还可以轻松地将 myproject 更改为您认为合适的任何名称。 Here is an example with no wildcards but you can easily implement.
  • @Prix 我正在寻找 .htaccess 内部的方法

标签: php apache mod-rewrite clean-urls


【解决方案1】:

首先,请参阅我对您的代码的其他问题的回复:Why .htaccess mod_rewrite does not show a real directory

现在,RewriteBase 不会解决您关于 css/js/images 等的问题。它仅适用于 htaccess,它定义了重写规则时的基本路径。

避免此问题的一种常见方法是在所有文件中添加一个基本网址,紧跟在<head> html 标记之后。
对你来说,应该是:<base href="http://localhost/myproject/" />

否则,如果您到达 localhost/myprojects/tours/inside,那么您的 css/js/images links 将被解析为 localhost/myprojects/tours/inside/__here__,因为这里的默认基本路径是当前目录 (/myproject/tours/inside/),而这不是你想要的

编辑:如果是这种情况,请不要忘记从 css/images/javascript html 链接中删除前导斜杠

【讨论】:

  • 现在即使使用一个参数也不起作用。我不知道为什么。正如您在下一个问题(解决方案 1)中所说,我已经更改了 .htaccess 文件。
  • 您是否在RewriteEngine on 之后添加了RewriteBase /myprojects/?另外,it does not work 是什么意思?您是否收到 http 错误或仍然显示 css/js/images 问题?
  • 我已经用RewriteBase 测试了它,没有它。还有<base> 和没有它。但问题仍然是 css/js/images 问题
  • 好吧,正确的方法是从其他问题(解决方案 1)中获取我的代码,并在 RewriteEngine on 之后添加 RewriteBase /myproject/(不要忘记用真实姓名重命名 myproject)。然后,您必须在每个相关页面 中的<head> html 标记之后添加<base href="http://localhost/myproject/" />(不要忘记在此处重命名)。最后,您的 css/images/js html 链接不得以 / 开头。之后,这应该工作
  • 所有以/开头的css、js和图片。即使我写了RewriteBase /myproject 和<base href="http://localhost/myproject" />,我也必须从路径的开头省略/?
【解决方案2】:

浏览器将通过查看您的 /myprojects/tours 上下文从您的相对 URL 路径构建绝对 URL 路径。您可能需要去掉该前缀的一到两层才能找到真正的路径。

当您使用旧 URL 和新 URL 时,访问日志将清楚地显示您输入的相对 URL。

【讨论】:

  • 在哪里可以找到访问日志?
猜你喜欢
  • 1970-01-01
  • 2013-03-19
  • 2011-07-04
  • 1970-01-01
  • 2013-07-25
  • 1970-01-01
  • 1970-01-01
  • 2010-12-20
  • 1970-01-01
相关资源
最近更新 更多