mod_rewrite没有工作htaccess

时间:2017-01-27 06:58:25

标签: php apache .htaccess mod-rewrite

我有一个包含11个子域的website。我在htaccess根文件夹中有一个主public_html个文件,其中包含cache等常见的共享特征。我在每个子域根文件夹中都有单独的htaccess文件,我使用mod_rewrite但是我无法重写URL。我正在尝试将其从dundaah.com/days/content.php?day=thur更改为更清晰dundaah.com/thursday,将子域music.dundaah.com/days/content.php?day=thur更改为首选music.dundaah.com/thursday。到目前为止,我的第一个研究代码只会将我转到网址dundaah.com/day/thur,第二个转到dundaah.com/thursday仍然会给我404错误。我没有改变网站的内部链接,这是一个问题吗?有人可以帮忙吗?感谢

<IfModule mod_rewrite.c>

  Options +FollowSymlinks
  
  # enable the rewrite engine
  RewriteEngine On
  RewriteCond %{REQUEST_URI} ^/days/content.php
  RewriteCond %{QUERY_STRING} ^day=([a-z]+)$
  RewriteRule ^(.*)$ /days/%1? [R,L]

  # or for individual pages 
  RewriteCond %{REQUEST_URI} ^/days/content.php
  RewriteCond %{QUERY_STRING} ^day=thur$
  RewriteRule ^(.*)$ /thursday? [R,L]
</IfModule>

3 个答案:

答案 0 :(得分:2)

这会使/thursday工作(以及所有其他日子),将其放在主.htaccess和子域中。它还会将旧网址重定向到新网址。

只有在Apache 2.4或更高版本上才能使用它。如果您不是,请告诉我,我会更新答案。

RewriteEngine on

# Redirect old URLs
RewriteCond %{QUERY_STRING} =day=mon
RewriteRule ^days/content\.php$ /monday [R=301,END]
RewriteCond %{QUERY_STRING} =day=tue
RewriteRule ^days/content\.php$ /tuesday [R=301,END]
RewriteCond %{QUERY_STRING} =day=wed
RewriteRule ^days/content\.php$ /wednesday [R=301,END]
RewriteCond %{QUERY_STRING} =day=thur
RewriteRule ^days/content\.php$ /thursday [R=301,END]
RewriteCond %{QUERY_STRING} =day=fri
RewriteRule ^days/content\.php$ /friday [R=301,END]
RewriteCond %{QUERY_STRING} =day=sat
RewriteRule ^days/content\.php$ /saturday [R=301,END]
RewriteCond %{QUERY_STRING} =day=sun
RewriteRule ^days/content\.php$ /sunday [R=301,END]

# Rewrite new URLs
RewriteRule ^monday$ days/content.php?day=mon [END]
RewriteRule ^tuesday$ days/content.php?day=tue [END]
RewriteRule ^wednesday$ days/content.php?day=wed [END]
RewriteRule ^thursday$ days/content.php?day=thur [END]
RewriteRule ^friday$ days/content.php?day=fri [END]
RewriteRule ^saturday$ days/content.php?day=sat [END]
RewriteRule ^sunday$ days/content.php?day=sun [END]

最好单独进行这些日子,因为脚本使用的是简短形式,而新网址并不适用。如果需要,您可以更改它们,或者如果我遗漏了某些内容,请告诉我。

答案 1 :(得分:1)

Apachenginx都有 内部 外部 的概念重定向。

您可以执行的操作是创建“重定向循环”,其中/days/content.php?day=thur redirect / R(外部重定向)到/thursday,而{ {1}}会在内部返回/thursday,这可能最初看起来像一个循环。

请参阅:

这可以通过在每种情况下针对请求uri 进行测试来完成:

/days/content.php?day=thur

答案 2 :(得分:0)

道歉,我是在我的网站上使用错误文件夹目录系统的人。这是正在使用的

public_html(www directory) -index.php -vidz(sub-domain) -index.php -days -_imports -css -js -php -content.php -contact.php

这是我升级的系统

public_html(www directory) -index.php -vidz(sub-domain) -index.php -content.php -contact.php -assets -_imports -css -js -php

这样就可以将链接设为<a href='monday'>Mon</a>,并使用下面的.htaccess重定向规则。

<IfModule mod_rewrite.c>

    Options +FollowSymlinks
    RewriteEngine On   
    RewriteRule ^monday$ content.php?day=mon [NC,L]
    RewriteRule ^tuesday$ content.php?day=tue [NC,L]
    RewriteRule ^wednesday$ content.php?day=wed [NC,L]
    RewriteRule ^thursday$ content.php?day=thur [NC,L]
    RewriteRule ^friday$ content.php?day=fri [NC,L]
    RewriteRule ^saturday$ content.php?day=sat [NC,L]
    RewriteRule ^sunday$ content.php?day=sun [NC,L]
    RewriteRule ^contact$ contact.php [NC,L]

</IfModule>

感谢所有回答的人!它帮助我意识到了这一点。