【问题标题】:htaccess remove www and redirect to accessed urlhtaccess 删除 www 并重定向到访问的 url
【发布时间】:2014-01-03 10:26:02
【问题描述】:

我正在使用 codeigniter 框架,我需要强制从 url 中删除 www,所以我正在使用此代码

RewriteEngine on
RewriteCond $1 !^(index\.php|css|images|js|plugins|scripts|fancybox|uploads|mobile|robots\.txt)
RewriteRule ^(.*)$ /framework/index.php?/$1 [L]
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1%{REQUEST_URI}/$1 [R=301,QSA,NC,L]

此代码强制删除 www。但问题是当用户访问带有 www 的链接时

eg:www.mydomain.com/framework/article/sometestarticle368/

它正在重定向到

www.mydomain.com/framework/

我该如何解决这个问题?

【问题讨论】:

标签: php regex apache .htaccess codeigniter


【解决方案1】:

试试这个:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.yoursite\.com [NC]
RewriteRule (.*) http://yoursite.com/$1 [R=301,L]
  • 谢谢

【讨论】:

    【解决方案2】:

    更改规则的顺序:

    RewriteEngine on
    
    RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
    RewriteRule ^(.*)$ http://%1%{REQUEST_URI}/$1 [R=301,NE,L]
    
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond $1 !^(index\.php|css|images|js|plugins|scripts|fancybox|uploads|mobile|robots\.txt)
    RewriteRule ^(.*)$ /framework/index.php?/$1 [L,QSA]
    

    否则您的第二条规则首先运行并将 URI 更改为 /framework/... 在 www 删除规则之前..

    【讨论】:

    • 感谢您的重播,此代码不适用于通过 www 访问此域的 ajax 调用。我该如何解决这个问题?
    • Apache 不知道 Ajax 请求和常规 Web 请求之间的区别。您的 AJAX 调用中到底有什么不工作,您可以从 Firebug 中检查并告诉我吗?还让我知道您的 AJAX 调用的完整 URL 是什么,它是否执行任何 POST 操作?
    猜你喜欢
    • 2023-04-03
    • 1970-01-01
    • 2017-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多