.htaccess RewriteRule 还重写了我的 css、js 和图像文件。如何忽略这些?
.htaccess RewriteRule also rewriting my css, js and images files. how to ignore these?
我希望当用户输入 http://example.com/abc/123/jon/ in URL is actually show this file http://example.com/abc.php?id=123&name=jon 时,这很容易通过将这些行添加到 htaccess 文件中来完成:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^abc/(.*)/(.*)/ abc.php?id=&name= [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 和图像。
我已经在这里尝试过许多类似的答案,但是 none 为 me.i 工作的人正在为此寻找 .htaccess 解决方案。
你可以使用它:
RewriteEngine on
# not rewrite css, js and images
RewriteCond %{REQUEST_URI} !\.(?:css|js|jpe?g|gif|png)$ [NC]
RewriteRule ^abc/(.+)/(.+)/ abc.php?id=&name= [L]
# rewrite css, js and images, from root
RewriteRule ^abc/[^/]+/[^/]+/(.+)$ [L]
如果您的最终 css(或 js)目录不在根目录下,您可以添加最后一个 </code> 之前的路径。现在是:<code>/css/style.css
和 /abc/xxx/yyy
/css/style.css
在RewriteRule
前加一行:
RewriteCond %{REQUEST_FILENAME} !-f
这意味着如果您的请求 uri 指向现有文件,则下一个 RewriteRule
将不会触发。
如果你想要其他方式,那么这个应该做:
RewriteCond %{REQUEST_FILENAME} !\.(css|js|png|jpg)$
您可以添加更多由极点分隔的分机 (|
)
@Croises 的回答是正确的,但我必须在 $1
之前添加完整的 domain_url
所以最后的答案是:
RewriteEngine on
RewriteCond %{REQUEST_URI} !\.(?:css|js|jpe?g|gif|png)$ [NC]
RewriteRule ^abc/(.*)/(.*)/ abc.php?id=&name= [L]
RewriteRule ^abc/[^/]+/[^/]+(/.+)$ http://example.com/ [L]
我希望当用户输入 http://example.com/abc/123/jon/ in URL is actually show this file http://example.com/abc.php?id=123&name=jon 时,这很容易通过将这些行添加到 htaccess 文件中来完成:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^abc/(.*)/(.*)/ abc.php?id=&name= [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 和图像。
我已经在这里尝试过许多类似的答案,但是 none 为 me.i 工作的人正在为此寻找 .htaccess 解决方案。
你可以使用它:
RewriteEngine on
# not rewrite css, js and images
RewriteCond %{REQUEST_URI} !\.(?:css|js|jpe?g|gif|png)$ [NC]
RewriteRule ^abc/(.+)/(.+)/ abc.php?id=&name= [L]
# rewrite css, js and images, from root
RewriteRule ^abc/[^/]+/[^/]+/(.+)$ [L]
如果您的最终 css(或 js)目录不在根目录下,您可以添加最后一个 </code> 之前的路径。现在是:<code>/css/style.css
和 /abc/xxx/yyy
/css/style.css
在RewriteRule
前加一行:
RewriteCond %{REQUEST_FILENAME} !-f
这意味着如果您的请求 uri 指向现有文件,则下一个 RewriteRule
将不会触发。
如果你想要其他方式,那么这个应该做:
RewriteCond %{REQUEST_FILENAME} !\.(css|js|png|jpg)$
您可以添加更多由极点分隔的分机 (|
)
@Croises 的回答是正确的,但我必须在 $1
之前添加完整的 domain_url所以最后的答案是:
RewriteEngine on
RewriteCond %{REQUEST_URI} !\.(?:css|js|jpe?g|gif|png)$ [NC]
RewriteRule ^abc/(.*)/(.*)/ abc.php?id=&name= [L]
RewriteRule ^abc/[^/]+/[^/]+(/.+)$ http://example.com/ [L]