我想要当URL中的用户输入http://example.com/abc/123/jon/实际显示此文件http://example.com/abc.php?id=123&name=jon时,可以通过将这些行添加到htaccess文件中来轻松完成:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^abc/(.*)/(.*)/ abc.php?id=$1&name=$2 [L]
但我的abc.php文件有一些(css,js)文件:
<link href="css/style.css" rel="stylesheet">
<script src="js/jquery-1.10.2.js"></script>
和图片如:img / logo.png
但由于我的.htaccess文件,它在这里搜索style.css:http://example.com/abc/123/jon/css/style.css 而不是http://example.com/css/style.css,类似于js和图像。
我已经在这里尝试过很多类似的答案,但没有一个能为我工作。我正在寻找.htaccess解决方案。
答案 0 :(得分:11)
您可以使用:
RewriteEngine on
# not rewrite css, js and images
RewriteCond %{REQUEST_URI} !\.(?:css|js|jpe?g|gif|png)$ [NC]
RewriteRule ^abc/(.+)/(.+)/ abc.php?id=$1&name=$2 [L]
# rewrite css, js and images, from root
RewriteRule ^abc/[^/]+/[^/]+/(.+)$ $1 [L]
如果最终的css(或js)目录不是root用户,则可以在最后$1
之前添加路径。现在它:/css/style.css
/abc/xxx/yyy
/css/style.css
答案 1 :(得分:2)
只需在RewriteRule
一行之前添加:
RewriteCond %{REQUEST_FILENAME} !-f
这意味着如果您的请求uri指向现有文件,则下一个RewriteRule
将不会触发。
如果你想要其他方式,那么这个应该做:
RewriteCond %{REQUEST_FILENAME} !\.(css|js|png|jpg)$
您可以添加以极点(|
)
答案 2 :(得分:-1)
@Croises的回答是正确的但我必须在$ 1之前添加我的完整domain_url
所以最后的答案是:
RewriteEngine on
RewriteCond %{REQUEST_URI} !\.(?:css|js|jpe?g|gif|png)$ [NC]
RewriteRule ^abc/(.*)/(.*)/ abc.php?id=$1&name=$2 [L]
RewriteRule ^abc/[^/]+/[^/]+(/.+)$ http://example.com/$1 [L]