0

我正在使用以下 htaccess 规则,该规则在整个互联网上都建议用于删除 codeigniter url 中的 index.php。还有一些我在上面添加的重定向规则。

RewriteEngine On
RewriteBase /

RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?$1 [L] 

问题是:我收到了一些奇怪的 http 请求,我认为这是由上面的 htaccess 规则引起的。这里是其中的一些 :

https://www.sitename.com/index.php/favicon.ico 应该是 .com/favicon.ico

https://www.sitename.com/index.php/scripts/jquery.js 应该是 .com/public/jquery.js 作为旁注我使用基本标签将资产重定向到 /public/

奇怪的是我找不到第二次重定向发生的位置我测试了整个站点并且 javascript 和 css 文件正确加载

我通过让我的控制器忽略这些请求来处理此重定向,但不久前发生了一个奇怪的错误。我在这里问: https ://stackoverflow.com/questions/11775849/htaccess-didnt-work-until-renaming-and-then-renaming-back

我的猜测是,即使我忽略了错误重定向的请求,托管公司也会收到它们,并且可能给他们造成了一些麻烦,这导致了我在托管公司维护的链接问题中共享的问题。

无论如何,问题是: 我怎样才能使 htaccess 规则只重定向最后没有文件扩展名的请求?

4

1 回答 1

1

您在该行之前缺少REQUEST_FILENAME一行:

 RewriteCond $1 !^(index\.php|assets|something|fav\.ico|robots\.txt)

您可以修改它以满足您的需要。我在assets文件夹中有我的 JS/CSS 等,所以它不受重写的影响。

所以完整的.htaccess看起来像这样:

RewriteEngine On
RewriteBase /

RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L]

RewriteCond $1 !^(index\.php|assets|something|fav\.ico|robots\.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?$1 [L] 
于 2012-08-06T13:19:10.427 回答