.htaccess有2个参数弄乱了css,js,图像路径

时间:2013-05-31 01:45:33

标签: regex apache .htaccess mod-rewrite

我正在使用网页上的网址,但我无法解决有2个参数的网址问题。

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-zA-Z0-9-z\-]+)/?$ index.php?strona=$1 [L]
RewriteRule ^([a-zA-Z0-9-z\-]+)/([a-zA-Z0-9-z\-]+)/?$ index.php?strona=$1&id=$2 [L]

网址似乎很好,但当我的当前网址有2个参数时(例如我在 http://example.com/subpage/5 整个网页已损坏(样式表,导航等)因为.htaccess将所有链接更改为:

(for example navigation):
http://example.com/subpage_with_2_parameters/home
instead of
http://example.com/home

包含一个参数的网页(例如: http://example.com/contact )可以正常使用。

我想到的只有解决方案(这很可怕)是绝对的联系。

2 个答案:

答案 0 :(得分:4)

在实现所谓的漂亮网址后,你不是唯一一个处理css,js,图像路径问题的人。我几乎每天都在SO上报告这些问题。

您可以通过3种方式解决此问题:

  1. 最佳解决方案是使用图像,css和js文件的绝对路径,即使用/http://
  2. 开始路径
  3. 另一种选择是在HTML头部分中使用base href标记,如下所示:

    <base href="http://www.example.com/">

  4. 第3个选项是通过mod_rewrite

  5. 在.htaccess文件中将上面的 其他RewriteLine:

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-l
    RewriteCond %{DOCUMENT_ROOT}/$1 -f
    RewriteRule ^[^/]+/([^.]+\.(?:js|css|jpe?g|png|gif))$ /$1 [L,R=301,NC]
    

答案 1 :(得分:0)

这不是你的重写规则,它会破坏你的样式表,而是你的实际HTML。如果您有一个名为foo的实际目录并在其中放置index.php,则会发生同样的事情。

如果您编写<a href="home">Home</a>,该链接与当前目录相关(在网址空间中),因此在包含http://example.com/foo/bar/baz之类网址的网页上,该链接指向{ {1}}。

您想要的是链接相对于您网域的;为此,您需要一个前导斜杠:http://example.com/foo/bar/home

之前似乎工作的唯一原因是你的所有网址都在根目录中,因此“当前目录”和“域根”是相同的。