我有一个包含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>
答案 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)
Apache和nginx都有 内部 和 外部 的概念重定向。
您可以执行的操作是创建“重定向循环”,其中/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>
感谢所有回答的人!它帮助我意识到了这一点。