我正在使用网页上的网址,但我无法解决有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 )可以正常使用。
我想到的只有解决方案(这很可怕)是绝对的联系。
答案 0 :(得分:4)
在实现所谓的漂亮网址后,你不是唯一一个处理css,js,图像路径问题的人。我几乎每天都在SO上报告这些问题。
您可以通过3种方式解决此问题:
/
或http://
另一种选择是在HTML头部分中使用base 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]
答案 1 :(得分:0)
这不是你的重写规则,它会破坏你的样式表,而是你的实际HTML。如果您有一个名为foo
的实际目录并在其中放置index.php
,则会发生同样的事情。
如果您编写<a href="home">Home</a>
,该链接与当前目录相关(在网址空间中),因此在包含http://example.com/foo/bar/baz
之类网址的网页上,该链接指向{ {1}}。
您想要的是链接相对于您网域的根;为此,您需要一个前导斜杠:http://example.com/foo/bar/home
之前似乎工作的唯一原因是你的所有网址都在根目录中,因此“当前目录”和“域根”是相同的。