1

我正在尝试在我的网站上使用漂亮的 URL,但我对 htaccess 了解不多,但经过一番搜索后,我得到了以下结果:

RewriteEngine On
RewriteRule ^([a-z]+)\/([0-9]+)\/?$ content.php?action=$1&id=$2 [NC]

我正在尝试改变这一点:

mysite.com/cms/content.php?action=content&id=80

进入:

mysite.com/cms/content/80

但不知何故它不起作用,我得到的是一个空白屏幕和一个 404 错误,

Failed to load resource: the server responded with a status of 404 (Not Found) --in-- /cms/files/plugin/tinymce/tinymce.min.js

关于 404 错误:它应该从 mystie.com/files/plugin/tinymce/tinymce.min.js 加载一个 .js 文件——不是——mystie.com/cms/files/plugin/tinymce/tinymce.min.js

我的 htaccess 文件位于根文件夹中。难道我做错了什么?

我认为服务器没有读取我的 .htaccess 文件。如何找出问题?

4

5 回答 5

0

/cms/的 URL 位于其余部分之前,因此您需要更改RewriteRule为以下内容:

RewriteRule ^cms/([a-z]+)\/([0-9]+)\/?$ content.php?action=$1&id=$2 [NC]

另外,我希望您知道 .htaccess 不能在某些服务器(如nginx或某些自定义服务器)上运行,甚至在Apache服务器上也可以mod_rewrite禁用。

于 2015-03-09T14:04:16.207 回答
0
RewriteEngine On
RewriteRule ^/cms/([a-z]+)/([0-9]+)$ content.php?action=$1&id=$2 [NC]

删除转义斜线 \

于 2015-03-09T14:06:25.517 回答
0

我的猜测是您的脚本和样式是通过相对 URL 链接到的。因为旧 URL 是/cms/content.phpURI 基础,/cms/并且您的相对链接都解析为 under /cms/,所以我认为这就是您想要的。

但是,当您将链接更改为 时/cms/content/1234,URI 基础变为/cms/content/并且所有相关链接都将使用它作为其基础,并且由于“内容”甚至不是真正的文件夹,所有这些链接将 404,并且您不会加载任何您的 CSS 内容或脚本。

要么将链接更改为绝对 URL,要么在页面标题中指定 URI 基础(在<head> </head>标签内):

<base href="/cms/" />
于 2015-03-09T14:25:05.203 回答
0

您需要将此规则放在/cms/.htaccess

RewriteEngine On
RewriteBase /cms/

RewriteRule ^([a-z]+)/([0-9]+)/?$ content.php?action=$1&id=$2 [NC,L,QSA]

然后,您需要在<head>页面的 HTML 部分中添加它:<base href="/" />以便从该 URL 而非当前页面的相对 URL 解析每个相对 URL。

于 2015-03-09T14:30:48.537 回答
0

如果您的 htaccess 在根目录中,则需要确保包含子文件夹。试试这个规则。

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^cms/([a-z]+)/([0-9]+)/?$ /cms/content.php?action=$1&id=$2 [NC,L]

此外,空白屏幕通常意味着 PHP 错误。

于 2015-03-09T14:33:56.570 回答