1

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

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]

URL 看起来不错,除了当我当前的 URL 有 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 )可以正常工作。

我想到的唯一解决方案(这很可怕)是绝对链接。

4

2 回答 2

4

在实现所谓的漂亮 URL之后,您不是唯一一个处理 css、js、图像路径变得混乱的问题的人。我几乎每天都在 SO 上看到这些问题的报告。

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

  1. 最佳解决方案是对图像、css 和 js 文件使用绝对路径,即以/或开头的路径http://

  2. 另一种选择是在 HTML head 部分中使用基本 href 标记,如下所示:

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

  3. 第三个选项是通过 mod_rewrite

将这些行放在.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]
于 2013-05-31T03:58:46.420 回答
0

破坏样式表的不是您的重写规则,而是您的实际 HTML。如果你有一个实际的目录被调用foo并放置index.php在那里,同样的事情也会发生。

如果您编写<a href="home">Home</a>,则该链接相对于当前目录(在 URL 空间中),因此在具有类似http://example.com/foo/bar/baz它的 URL 的页面上链接到http://example.com/foo/bar/home.

相反,您想要的是链接相对于您的域的根;为此,您需要一个前导斜杠:<a href="/home">Home</a>

之前这似乎可行的唯一原因是您的所有 URL 都在根目录中,因此“当前目录”和“域的根目录”是同一回事。

于 2013-05-31T01:52:17.757 回答