htaccess 在请求时不打开文件
htaccess does not open file when requested
告诉我问题是什么,假设有一个文件web/quberty/2.jpeg,我去link host/quberty/2.jpeg,网站产生404,虽然规则是
RewriteCond %{REQUEST_URI} !^/(web)
RewriteRule ^assets/(.*)$ /web/assets/ [L]
RewriteRule ^css/(.*)$ web/css/ [L]
RewriteRule ^js/(.*)$ web/js/ [L]
RewriteRule ^images/(.*)$ web/images/ [L]
RewriteRule (.*) /web/
整个 htaccess
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/(web)
RewriteRule ^assets/(.*)$ /web/assets/ [L]
RewriteRule ^css/(.*)$ web/css/ [L]
RewriteRule ^js/(.*)$ web/js/ [L]
RewriteRule ^images/(.*)$ web/images/ [L]
RewriteRule (.*) /web/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /web/index.php
根据您显示的示例,您能否尝试以下操作。由于您要将 web directory/folder 添加到所有 uris,因此请将其作为您的第一条规则并将其保存在您的 htaccess 规则文件的最顶部。
此外,请确保在测试您的 URL 之前清除浏览器缓存。
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/web [NC]
RewriteRule ^(.*)/?$ web/ [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ web/index.php [L]
您可能需要使用base标签来固定您的js和其他相关资源。如果您使用相对路径链接 js 文件,那么该文件显然会得到 404,因为它正在寻找 URL 路径。例如,如果 URL 路径是 /file/ 而不是 file.html 那么您的相关资源将从 /file/ 加载,这不是目录而是重写的 html 文件。要解决此问题,请使您的链接成为绝对链接或使用 base 标记。在您网页的 header 中添加此 <base href="/">
以便您的相关链接可以从正确的位置加载。
问题是没有标志,这是一个工作的 htaccess。
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/(web)
RewriteRule ^assets/(.*)$ /web/assets/ [L]
RewriteRule ^css/(.*)$ web/css/ [L]
RewriteRule ^js/(.*)$ web/js/ [L]
RewriteRule ^images/(.*)$ web/images/ [L]
RewriteRule (.*) /web/ [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /web/index.php
告诉我问题是什么,假设有一个文件web/quberty/2.jpeg,我去link host/quberty/2.jpeg,网站产生404,虽然规则是
RewriteCond %{REQUEST_URI} !^/(web)
RewriteRule ^assets/(.*)$ /web/assets/ [L]
RewriteRule ^css/(.*)$ web/css/ [L]
RewriteRule ^js/(.*)$ web/js/ [L]
RewriteRule ^images/(.*)$ web/images/ [L]
RewriteRule (.*) /web/
整个 htaccess
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/(web)
RewriteRule ^assets/(.*)$ /web/assets/ [L]
RewriteRule ^css/(.*)$ web/css/ [L]
RewriteRule ^js/(.*)$ web/js/ [L]
RewriteRule ^images/(.*)$ web/images/ [L]
RewriteRule (.*) /web/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /web/index.php
根据您显示的示例,您能否尝试以下操作。由于您要将 web directory/folder 添加到所有 uris,因此请将其作为您的第一条规则并将其保存在您的 htaccess 规则文件的最顶部。
此外,请确保在测试您的 URL 之前清除浏览器缓存。
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/web [NC]
RewriteRule ^(.*)/?$ web/ [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ web/index.php [L]
您可能需要使用base标签来固定您的js和其他相关资源。如果您使用相对路径链接 js 文件,那么该文件显然会得到 404,因为它正在寻找 URL 路径。例如,如果 URL 路径是 /file/ 而不是 file.html 那么您的相关资源将从 /file/ 加载,这不是目录而是重写的 html 文件。要解决此问题,请使您的链接成为绝对链接或使用 base 标记。在您网页的 header 中添加此 <base href="/">
以便您的相关链接可以从正确的位置加载。
问题是没有标志,这是一个工作的 htaccess。
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/(web)
RewriteRule ^assets/(.*)$ /web/assets/ [L]
RewriteRule ^css/(.*)$ web/css/ [L]
RewriteRule ^js/(.*)$ web/js/ [L]
RewriteRule ^images/(.*)$ web/images/ [L]
RewriteRule (.*) /web/ [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /web/index.php