Php Mod rewrite-如何使此规则起作用?

Php Mod rewrite-如何使此规则起作用?,php,.htaccess,mod-rewrite,Php,.htaccess,Mod Rewrite,我的网站只有一个文件可以调用(index.php),使用控制器我可以显示不同的页面。此页面位于office/web中 我以以下方式修改了.htaccess: Options +FollowSymlinks RewriteEngine On # Turn on the rewriting engine #skip existing files or directories RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_F

我的网站只有一个文件可以调用(index.php),使用控制器我可以显示不同的页面。此页面位于office/web中

我以以下方式修改了.htaccess:

Options +FollowSymlinks
RewriteEngine On    # Turn on the rewriting engine

#skip existing files or directories
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
#everything else goes to index.php
RewriteRule    ^sale/chicago/?$    /office/web/index.php?action=w_filter&type=1&zone=3    [NC,L]
RewriteRule    ^sale/?$    /office/web/index.php?action=w_filter&type=1    [NC,L]
RewriteRule    ^rent/?$    /office/web/index.php?action=w_filter&type=2    [NC,L]
访问
http://localhost/office/web/sale/chicago/
,页面将加载,因此主规则正在运行

但是,所需的所有其他文件(css、js…)都给出了404未找到错误

在html文件中使用
,它期望

http://localhost/office/web/sale/chicago/assets/js/bootstrap.min.js
正确的URL是:

http://localhost/office/web/assets/js/bootstrap.min.js
依此类推,适用于所有其他媒体文件


要解决这个问题,我需要在.htaccess中添加/更改什么?

您应该使用绝对URL链接js和css

而不是

<script type='text/javascript' src='assets/js/bootstrap.min.js'></script>

试试这个

<script type='text/javascript' src='/office/web/assets/js/bootstrap.min.js'></script>


让我知道它是否有用。

您应该使用绝对URL链接js和css

而不是

<script type='text/javascript' src='assets/js/bootstrap.min.js'></script>

试试这个

<script type='text/javascript' src='/office/web/assets/js/bootstrap.min.js'></script>


让我知道它是否有用。

您应该使用绝对URL链接js和css

而不是

<script type='text/javascript' src='assets/js/bootstrap.min.js'></script>

试试这个

<script type='text/javascript' src='/office/web/assets/js/bootstrap.min.js'></script>


让我知道它是否有用。

您应该使用绝对URL链接js和css

而不是

<script type='text/javascript' src='assets/js/bootstrap.min.js'></script>

试试这个

<script type='text/javascript' src='/office/web/assets/js/bootstrap.min.js'></script>


让我知道它是否有用。

这是基于纯
mod_rewrite
的解决方案,您可以避免在资源(js、图像、图像等)中写入完整路径:

将此规则添加到其他规则之上:

RewriteRule ^(assets/.+?)$ /office/web/$1 [L,NC,R]
另外,请理解,
RewriteCond
仅适用于下一个
RewriteRule
。在您的问题中,只有2个
RewriteCond
用于第一条规则,但接下来的2条规则没有

作为为每个规则添加
RewriteCond
的替代方法,您可以将此规则置于顶部以跳过所有文件/目录的重写规则:

## If the request is for a valid directory
RewriteCond %{REQUEST_FILENAME} -d [OR]
## If the request is for a valid file
RewriteCond %{REQUEST_FILENAME} -f [OR]
## don't do anything
RewriteRule ^ - [L]

这是一个基于纯
mod_rewrite
的解决方案,您可以避免在资源(js、图像、图像等)中写入完整路径:

将此规则添加到其他规则之上:

RewriteRule ^(assets/.+?)$ /office/web/$1 [L,NC,R]
另外,请理解,
RewriteCond
仅适用于下一个
RewriteRule
。在您的问题中,只有2个
RewriteCond
用于第一条规则,但接下来的2条规则没有

作为为每个规则添加
RewriteCond
的替代方法,您可以将此规则置于顶部以跳过所有文件/目录的重写规则:

## If the request is for a valid directory
RewriteCond %{REQUEST_FILENAME} -d [OR]
## If the request is for a valid file
RewriteCond %{REQUEST_FILENAME} -f [OR]
## don't do anything
RewriteRule ^ - [L]

这是一个基于纯
mod_rewrite
的解决方案,您可以避免在资源(js、图像、图像等)中写入完整路径:

将此规则添加到其他规则之上:

RewriteRule ^(assets/.+?)$ /office/web/$1 [L,NC,R]
另外,请理解,
RewriteCond
仅适用于下一个
RewriteRule
。在您的问题中,只有2个
RewriteCond
用于第一条规则,但接下来的2条规则没有

作为为每个规则添加
RewriteCond
的替代方法,您可以将此规则置于顶部以跳过所有文件/目录的重写规则:

## If the request is for a valid directory
RewriteCond %{REQUEST_FILENAME} -d [OR]
## If the request is for a valid file
RewriteCond %{REQUEST_FILENAME} -f [OR]
## don't do anything
RewriteRule ^ - [L]

这是一个基于纯
mod_rewrite
的解决方案,您可以避免在资源(js、图像、图像等)中写入完整路径:

将此规则添加到其他规则之上:

RewriteRule ^(assets/.+?)$ /office/web/$1 [L,NC,R]
另外,请理解,
RewriteCond
仅适用于下一个
RewriteRule
。在您的问题中,只有2个
RewriteCond
用于第一条规则,但接下来的2条规则没有

作为为每个规则添加
RewriteCond
的替代方法,您可以将此规则置于顶部以跳过所有文件/目录的重写规则:

## If the request is for a valid directory
RewriteCond %{REQUEST_FILENAME} -d [OR]
## If the request is for a valid file
RewriteCond %{REQUEST_FILENAME} -f [OR]
## don't do anything
RewriteRule ^ - [L]

是的,这项工作。我已经在想了。但是通过这种方式,每次我将文件上传到服务器上时,我都需要更改绝对路径。这是因为这些文件实际上是html模板。。。我在考虑更多关于.htaccess的解决方案。最终,我将不得不使用它。@Parkyprg为什么要更改绝对路径?因为在本地主机上我有/office/web/,但在服务器上我有不同的文件路径(例如/web/only)@Parkyprg我曾经遇到过这个问题。然后我学会了在localhost中创建一个子域,例如myweb.localhost.com,它指向/office,所以它与服务器中的子域是一样的。是的,这项工作。我已经在想了。但是通过这种方式,每次我将文件上传到服务器上时,我都需要更改绝对路径。这是因为这些文件实际上是html模板。。。我在考虑更多关于.htaccess的解决方案。最终,我将不得不使用它。@Parkyprg为什么要更改绝对路径?因为在本地主机上我有/office/web/,但在服务器上我有不同的文件路径(例如/web/only)@Parkyprg我曾经遇到过这个问题。然后我学会了在localhost中创建一个子域,例如myweb.localhost.com,它指向/office,所以它与服务器中的子域是一样的。是的,这项工作。我已经在想了。但是通过这种方式,每次我将文件上传到服务器上时,我都需要更改绝对路径。这是因为这些文件实际上是html模板。。。我在考虑更多关于.htaccess的解决方案。最终,我将不得不使用它。@Parkyprg为什么要更改绝对路径?因为在本地主机上我有/office/web/,但在服务器上我有不同的文件路径(例如/web/only)@Parkyprg我曾经遇到过这个问题。然后我学会了在localhost中创建一个子域,例如myweb.localhost.com,它指向/office,所以它与服务器中的子域是一样的。是的,这项工作。我已经在想了。但是通过这种方式,每次我将文件上传到服务器上时,我都需要更改绝对路径。这是因为这些文件实际上是html模板。。。我在考虑更多关于.htaccess的解决方案。最终,我将不得不使用它。@Parkyprg为什么要更改绝对路径?因为在本地主机上我有/office/web/,但在服务器上我有不同的文件路径(例如/web/only)@Parkyprg我曾经遇到过这个问题。然后我学会了在localhost中创建一个子域,例如myweb.localhost.com,它指向/office,所以它是