.htaccess 漂亮的 URL 不起作用
.htaccess pretty URLs are not working
我想在我的网站上使用漂亮的 URL,我对 htaccess 了解不多,但经过一番搜索后我得到了这个:
RewriteEngine On
RewriteRule ^([a-z]+)\/([0-9]+)\/?$ content.php?action=&id= [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 文件。我如何找出问题所在?
您的 URL 中有 /cms/
,所以您需要将 RewriteRule
更改为如下内容:
RewriteRule ^cms/([a-z]+)\/([0-9]+)\/?$ content.php?action=&id= [NC]
此外,我希望您知道 .htaccess 无法在某些服务器上运行(例如 nginx or some custom ones), and even on Apache 服务器,可以 mod_rewrite
禁用。
RewriteEngine On
RewriteRule ^/cms/([a-z]+)/([0-9]+)$ content.php?action=&id= [NC]
删除转义斜杠 \
我的猜测是您的脚本和样式是通过相关的 URL 链接到的。因为旧的 URL 是 /cms/content.php
URI 基础是 /cms/
并且您的相关链接全部解析为 /cms/
,我认为这就是您想要的。
然而,当您将链接更改为 /cms/content/1234
时,URI 基数变为 /cms/content/
并且所有相关链接都将使用它作为其基数,并且由于 "content" 甚至一个真正的文件夹,所有这些链接都将是 404,并且您不会加载任何 CSS 内容或脚本。
将链接更改为绝对 URL 或在页面的 header 中指定 URI 基础(在 <head> </head>
标记内):
<base href="/cms/" />
您需要将此规则放入 /cms/.htaccess
:
RewriteEngine On
RewriteBase /cms/
RewriteRule ^([a-z]+)/([0-9]+)/?$ content.php?action=&id= [NC,L,QSA]
然后您需要在页面 HTML 的 <head>
部分添加:<base href="/" />
这样每个亲戚 URL 是从 URL 解析的,而不是当前页面的相对 URL.
如果您的 htaccess 在根目录中,您需要确保包含子文件夹。
试试这个规则。
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^cms/([a-z]+)/([0-9]+)/?$ /cms/content.php?action=&id= [NC,L]
此外,空白屏幕通常意味着 PHP 错误。
我想在我的网站上使用漂亮的 URL,我对 htaccess 了解不多,但经过一番搜索后我得到了这个:
RewriteEngine On
RewriteRule ^([a-z]+)\/([0-9]+)\/?$ content.php?action=&id= [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 文件。我如何找出问题所在?
您的 URL 中有 /cms/
,所以您需要将 RewriteRule
更改为如下内容:
RewriteRule ^cms/([a-z]+)\/([0-9]+)\/?$ content.php?action=&id= [NC]
此外,我希望您知道 .htaccess 无法在某些服务器上运行(例如 nginx or some custom ones), and even on Apache 服务器,可以 mod_rewrite
禁用。
RewriteEngine On
RewriteRule ^/cms/([a-z]+)/([0-9]+)$ content.php?action=&id= [NC]
删除转义斜杠 \
我的猜测是您的脚本和样式是通过相关的 URL 链接到的。因为旧的 URL 是 /cms/content.php
URI 基础是 /cms/
并且您的相关链接全部解析为 /cms/
,我认为这就是您想要的。
然而,当您将链接更改为 /cms/content/1234
时,URI 基数变为 /cms/content/
并且所有相关链接都将使用它作为其基数,并且由于 "content" 甚至一个真正的文件夹,所有这些链接都将是 404,并且您不会加载任何 CSS 内容或脚本。
将链接更改为绝对 URL 或在页面的 header 中指定 URI 基础(在 <head> </head>
标记内):
<base href="/cms/" />
您需要将此规则放入 /cms/.htaccess
:
RewriteEngine On
RewriteBase /cms/
RewriteRule ^([a-z]+)/([0-9]+)/?$ content.php?action=&id= [NC,L,QSA]
然后您需要在页面 HTML 的 <head>
部分添加:<base href="/" />
这样每个亲戚 URL 是从 URL 解析的,而不是当前页面的相对 URL.
如果您的 htaccess 在根目录中,您需要确保包含子文件夹。 试试这个规则。
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^cms/([a-z]+)/([0-9]+)/?$ /cms/content.php?action=&id= [NC,L]
此外,空白屏幕通常意味着 PHP 错误。