应用重写规则时,友好URL部分起作用

时间:2016-01-10 01:09:09

标签: apache .htaccess mod-rewrite

当我应用重写规则时,我遇到了.htaccess的问题。下面我解释一下我做了什么:

在localhost中:

路径: / dev / Site

所需的友情网址: www.site.com/l/p - > l 用于语言, p 用于页面

源网址为: www.site.com/index.php?p=about&l=en

在.htaccess中:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/([^/]+)$ index.php?p=$2&l=$1 [L]

情况是重写规则部分工作

1- www.site.com/en/about有效,但当位于例如 / dev / Site / template / ing 的img文件夹无法获取文件时,因为需要以下结构: http://127.0.0.1/dev/Site/en/templates/img/

HTML(例如:)

<h1 class='center'>
  <a href='http://www.Site1.com/index.php?p=about&l=dev/Site1/es' >
    <img src='**templates/img/logo.png**' width='204' height='40' alt='Site1 Logo' /></a>
</h1>

我发现重写规则应用了href的网址中的更改。

1 个答案:

答案 0 :(得分:0)

这可能是由于我在您的代码中发现的几个原因, 您的代码目前看起来像这样:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/([^/]+)$ index.php?p=$2&l=$1 [L]

但我认为你的代码应该是:

RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/(.*)$ index.php?p=$2&l=$1 [L,QSA]

我所做的更改是:

  • +更改为*+表示一个或多个,而*表示零或更多,如果您正在寻找img路径,那么您不会从你的htaccess获得两个变量)
  • 在规则中添加了QSA(这会使查询字符串追加,所以基本上你将字符串添加到GET我相信吗?)
  • [^/]更改为.(该点表示任何角色都应该按照您的要求进行操作)
  • 将rewriterule的基础设置为root(/dev/Site

我希望我帮助过你,我建议你做一些关于htaccess的研究。

编辑1:

尝试更改图像,包括:

<h1 class='center'>
  <a href='http://www.Site1.com/index.php?p=about&l=dev/Site1/es' >
    <img src='/templates/img/logo.png' width='204' height='40' alt='Site1 Logo' /></a>
</h1>

改变:

  • 将图片从template/img/logo.png更改为/template/img/logo.png(您的方式包括(路径前没有/)告诉服务器必须从网址加载,使用你告诉的反斜杠从根开始看。)