【问题标题】:mod_rewrite select a folder for the domainmod_rewrite 为域选择一个文件夹
【发布时间】:2012-10-27 16:24:31
【问题描述】:

情况

我正在使用 Zend 框架,因此尝试按地址调用文件夹以失败告终,我们收到错误:“指定的控制器无效”。我需要将其他论坛连接到单独文件夹中的应用程序。我将 .htaccess 文件更改如下:

RewriteRule ^forum(.*)$ forum$1 [L]

有一段时间它很好,直到我意识到页面存在于两个域中的两个版本中(php 识别域 [.pl/.co.uk] 并选择语言)。所以我决定将论坛分成两个独立的模块(例如,波兰版论坛的文件夹将是:forum_pl,而对于英国,它将是:forum_uk - 两个不同的论坛)

有什么问题?

它需要重写 .htaccess 文件才能像这样工作:

如果: www.domena.pl/forum

那么:打开文件夹 /forum_pl 中的脚本

如果: www.domain.co.uk/forum

那么:打开文件夹 /forum_uk 中的脚本。

最糟糕的是,当我尝试修复添加 RewriteCond 的 .htaccess 文件时,第一个重定向不再正常工作,即使返回到原始(如上所示)版本也是如此。

如果我没有找到之前给出的答案,请帮助我并抱歉。

编辑:

第一个可行的解决方案

RewriteRule ^forum_pl(.*)$ forum_pl$1 [L]
RewriteRule ^forum_uk(.*)$ forum_uk$1 [L]
RewriteCond %{HTTP_HOST} ^www.domena.pl(.*) [NC]
RewriteRule ^forum(.*)$ forum_pl$1 [L]
RewriteCond %{HTTP_HOST} ^www.domain.co.uk(.*) [NC]
RewriteRule ^forum(.*)$ forum_uk$1 [L]

看起来它想要工作,但是需要解决的问题是(TODO):

  1. 当您输入:www.domain.pl/forum 时,它会将您带到 www.domain.pl/forum_pl/,但如果您输入:www.domain.pl/forum/,它会将您带到 www.domain.pl/forum /(从 forum_pl 读取)。如何使其在第一种情况下与第二种情况相同。

编辑:

我最后的解决方案:

#FORUM
#PL
RewriteCond %{REQUEST_URI} ^/forum$ [NC]
RewriteRule ^(.*)$ forum/ [R=301,L]

RewriteRule ^forum_pl(.*)$ forum_pl$1 [L]

RewriteCond %{REQUEST_URI} ^/forum_pl(.*)$ [NC]
RewriteRule ^(.*)$ http://www.domena.pl/forum/ [R=301,L] #Dosen't work properly (?)

RewriteCond %{HTTP_HOST} ^www.domena.pl(.*) [NC]
RewriteCond %{REQUEST_URI} ^/forum(/?)$ [NC]
RewriteRule ^forum[^/](.*)$ forum_pl/$1 #Dosen't work properly, but without it crash!
RewriteRule ^forum(.*)$ forum_pl$1 [L]
#UK
RewriteCond %{REQUEST_URI} ^/forum_uk(.*)$ [NC]
RewriteRule ^(.*)$ http://www.domain.co.uk/forum/ [R=301,L] #Dosen't work properly (?)

RewriteCond %{HTTP_HOST} ^www.domain.co.uk(.*) [NC]
RewriteCond %{REQUEST_URI} ^/forum(/?)$ [NC]
RewriteRule ^forum[^/](.*)$ forum_uk/$1 #Dosen't work properly, but without it crash!
RewriteRule ^forum(.*)$ forum_uk$1 [L]

最终的工作版本:

RewriteRule ^forum_pl(.*)$ forum_pl$1 [L]
RewriteRule ^forum_uk(.*)$ forum_uk$1 [L]

RewriteRule ^forum_pl(.*)$ http://www.domena.pl/forum$1 [R=301,L] # Not working!
RewriteRule ^forum_uk(.*)$ http://www.domain.co.uk/forum$1 [R=301,L] # Not working!

# Normalize URL first:
RewriteRule ^forum$ forum/ [R=301,L]

# redirect to polish version of web under forum_pl if on .pl TLD and
#  request is made to /forum/ (already normalized)
RewriteCond %{HTTP_HOST} =www.domena.pl [NC]
RewriteRule ^forum(.*)$ forum_pl$1 [L]

# redirect to english version of web under forum_en in on .uk TLD and
#  request is made to /forum/
RewriteCond %{HTTP_HOST} =www.domain.co.uk [NC]
RewriteRule ^forum(.*)$ forum_uk$1 [L]

很遗憾,您可以手动从浏览器的 forum_uk 和 forum_pl 文件夹中调用。

【问题讨论】:

    标签: .htaccess zend-framework mod-rewrite directory


    【解决方案1】:

    不确定我是否在您的长问题中正确定位了一些演变:-) 让我们试试这个:

    # Normalize URL first:
    RewriteRule ^forum$ forum/ [R=301,L]
    
    # redirect to polish version of web under forum_pl if on .pl TLD and
    #  request is made to /forum/ (already normalized)
    RewriteCond %{HTTP_HOST} =www.domena.pl [NC]
    RewriteRule ^forum/(.*)$ http://www.domena.pl/forum_pl/$1 [R=301,L]
    
    # redirect to english version of web under forum_en in on .uk TLD and
    #  request is made to /forum/
    RewriteCond %{HTTP_HOST} =www.domain.co.uk [NC]
    RewriteRule ^forum/(.*)$ http://www.domain.co.uk/forum_uk/$1 [R=301,L]
    

    如果您需要重写以采取不同的行动,请告诉我

    【讨论】:

    • 感谢您的回答!但它最终不是我想要的。现在它像这样工作: www.domena.pl/forum 打开 www.domena.pl/forum_pl/ www.domain.co.uk/forum 打开 www.domain.co.uk/forum_uk/ 我不想要 _pl 和 _uk在网址中:)
    • @user1532418 所以您想分别从文件夹 forum_pl 和 forum_uk 获取脚本,但是您想将 /forum/ 保留在浏览器地址栏中?如果是这样,您需要删除 R=301 - 它会重定向,因此浏览器中的地址栏会反映更改
    猜你喜欢
    • 2013-02-04
    • 1970-01-01
    • 2018-11-15
    • 1970-01-01
    • 1970-01-01
    • 2014-12-31
    • 2019-05-01
    • 2020-09-06
    • 1970-01-01
    相关资源
    最近更新 更多