1

我有一个共享主机,上面托管了多个域。在我的主机的根文件夹中存在一个 .htaccess(比如说是 htaccess1)。ht1中的代码是:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www.)?mydomain.com$ [NC]
RewriteCond %{REQUEST_URI} !^/mydomain/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /mydomain/$1
RewriteCond %{HTTP_HOST} ^(www.)?mydomain.com$ [NC]
RewriteRule ^(/)?$ mydomain/index.php [L]

这些规则存在,因此只有 urlwww.mydomain.com使用文件夹的所有文件mydomain。我是 url 重写的新手,所以我不明白每一行的含义。文件夹中存在另一个 .htaccess(比如 htaccess2)文件mydomain。代码是 htaccess2 是:

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([0-9]+)?/$ try.php?id=$1
RewriteRule ^([0-9]+)?$ try.php?id=$1
RewriteRule ^post/([0-9]+)?/$ post.php?id=$1
RewriteRule ^post/([0-9]+)?$ post.php?id=$1

在这个文件中,第 6,7 行工作正常,并将带有数字参数的请求重定向到,try.php但第 8,9 行不起作用,并给出 404 page not found 错误,确切的错误字符串是:

在此服务器上找不到请求的 URL /mydomain/post/1233445。

我怀疑 htaccess1 的某些效果是否会造成这个问题,因为我在第 8,9 行尝试了许多正则表达式的变体。请帮忙。

4

1 回答 1

2

主要.htaccess:

Options +FollowSymLinks -MultiViews
RewriteEngine on
RewriteBase /

RewriteCond %{HTTP_HOST} ^(www\.)?mydomain\.com$ [NC]
RewriteCond %{REQUEST_URI} !^/mydomain/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /mydomain/$1 [L]

RewriteCond %{HTTP_HOST} ^(www\.)?mydomain\.com$ [NC]
RewriteRule ^$ /mydomain/index.php [L]

变化:

  1. 在顶部添加了 RewriteBase。
  2. 添加L了标记以将其标记为最后一条规则。
  3. 添加了必需的选项。

我的域名.htaccess:

Options +FollowSymLinks -MultiViews
RewriteEngine on
RewriteBase /mydomain/

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

RewriteRule ^post/([0-9]+)/?$ post.php?id=$1 [L,QSA,NC]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([0-9]+)/?$ try.php?id=$1 [L,QSA]

变化:

  1. 在顶部添加了 RewriteBase。
  2. 添加了 L 标志以将其标记为最后一条规则。
  3. 删除了多余的规则。
  4. 将特定规则移至通用规则之上。
  5. 添加了必需的选项。
于 2013-04-30T18:38:18.510 回答